java list排序详解编程语言

1、简介

  这个和数组的排序又不一样了。

  其实Java针对数组和List的排序都有实现,对数组而言,你可以直接使用Arrays.sort对于List和Vector而言,你可以使用Collections.sort方法

  Java API针对集合类型的排序提供了2个方法:

java.util.Collections.sort(java.util.List) 
 
java.util.Collections.sort(java.util.List, java.util.Comparator)

  如果集合里面的元素都是相同类型的,并且实现了Comparable接口,那么可以直接调用第一个方法。

  如果你有其它的排序的想法,比如你不想按照自然排序进行,还可以传一个Comparator过去,比如反向。

  元素不相同的情况比较复杂,可以暂时不用考虑。

2、通过实现Comparable接口来实现list的排序

  假如现在我们有一个Person类的list集合,要让其按照一个Order属性进行排序,我们可以让Person类实现Comparable接口,重写其CompareTo方法即可。具体实现如下:

1)、Person实体类

public class Person implements Comparable<Person> { 
    private String name; 
    private Integer order; 
  
    /** 
     * @return the name 
     */ 
    public String getName() { 
        return name; 
    } 
  
    /** 
     * @param name 
     *            the name to set 
     */ 
    public void setName(String name) { 
        this.name = name; 
    } 
  
    /** 
     * @return the order 
     */ 
    public Integer getOrder() { 
        return order; 
    } 
  
    /** 
     * @param order 
     *            the order to set 
     */ 
    public void setOrder(Integer order) { 
        this.order = order; 
    } 
 
@Override
public int compareTo(Person arg0) { return this.getOrder().compareTo(arg0.getOrder()); //这里定义你排序的规则。 } }

   通过重写Comparable接口的compareTo方法,可以让程序按照我们想要的排列方式进行排序,如:这里我让Person按照order属性升序排序。

2)、测试类

public static void main(String[] args) { 
    //初始化数据 
    List<Person> listA = new ArrayList<Person>(); 
    Person p1 = new Person(); 
    Person p2 = new Person(); 
    Person p3 = new Person(); 
  
    p1.setName("name1"); 
    p1.setOrder(1); 
    p2.setName("name2"); 
    p2.setOrder(2); 
    p3.setName("name3"); 
    p3.setOrder(3); 
  
    listA.add(p2); 
    listA.add(p1); 
    listA.add(p3); 
 
    //排序 
    Collections.sort(listA); 
 
    //打印排序后的Person 
    for (Person p : listA) { 
        System.out.println(p.getName()); 
    } 
}

3)、结果:

name1 
name2 
name3

3、通过重载Collections.sort方法

  直接重载java.util.Collections.sort(java.util.List, java.util.Comparator) 方法。可以灵活的修改我们排序的方式,具体实现如下:

1)、Person实体类

  和上面的类相同,但没实现Comparable接口

public class Person { 
    private String name; 
    private Integer order; 
  
    /** 
     * @return the name 
     */ 
    public String getName() { 
        return name; 
    } 
  
    /** 
     * @param name 
     *            the name to set 
     */ 
    public void setName(String name) { 
        this.name = name; 
    } 
  
    /** 
     * @return the order 
     */ 
    public Integer getOrder() { 
        return order; 
    } 
  
    /** 
     * @param order 
     *            the order to set 
     */ 
    public void setOrder(Integer order) { 
        this.order = order; 
    } 
  
}

2)、测试类

public static void main(String[] args) { 
        List<Person> listA = new ArrayList<Person>(); 
        Person p1 = new Person(); 
        Person p2 = new Person(); 
        Person p3 = new Person(); 
  
        p1.setName("name1"); 
        p1.setOrder(1); 
        p2.setName("name2"); 
        p2.setOrder(2); 
        p3.setName("name3"); 
        p3.setOrder(3); 
  
        listA.add(p2); 
        listA.add(p1); 
        listA.add(p3); 
          
        //直接在这里添加我们的排序规则 
        Collections.sort(listA, new Comparator<Person>() { 
            public int compare(Person arg0, Person arg1) { 
                return arg0.getOrder().compareTo(arg1.getOrder()); 
            } 
        }); 
          
        for (Person p : listA) { 
            System.out.println(p.getName()); 
        } 
    }

  从上面看到,直接在Conllections.sort()方法中重写了一个Comparator接口,可以在不同的地方使用Person集合的不同排序方法。如上面还是按照Person的order属性升序排列,我只要改写该方法,就可以在其他地方按照其他的规则对我的list集合进行排序,但是这样子代码看起来会比前面的那种方式繁琐。

3)、结果

name1 
name2 
name3

  致谢:感谢您的阅读!

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/15121.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论