java list排序

一、简介java

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

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

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

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

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

  若是集合里面的元素都是相同类型的,而且实现了Comparable接口,那么能够直接调用第一个方法。this

  若是你有其它的排序的想法,好比你不想按照天然排序进行,还能够传一个Comparator过去,好比反向。spa

  元素不相同的状况比较复杂,能够暂时不用考虑。code

二、经过实现Comparable接口来实现list的排序blog

  假如如今咱们有一个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

三、经过重载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

  致谢:感谢您的阅读!

相关文章
相关标签/搜索