你的位置:首页 > Java教程

[Java教程]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)、结果:

name1name2name3

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)、结果

name1name2name3

  致谢:感谢您的阅读!