今天项目中涉及到对list的排序,特记录于此:
在Java Collection Framework中定义的List实现有Vector,ArrayList和LinkedList。这些集合提供了对对象组的索引访问。他们提供了元素的添加与删除支持。然而,它们并没有内置的元素排序支持。
你能够使用java.util.Collections类中的sort()方法对List元素进行排序。你既可以给方法传递一个List对象,也可以传递一个List和一个Comparator。如果列表中的元素全都是相同类型的类,并且这个类实现了Comparable接口,你可以简单的调用Collections.sort()。如果这个类没有实现Comparator,你也可以传递一个Comparator到方法sort()中,进行排序。如果你不想使用缺省的分类顺序进行排序,你同样可以传递一个Comparator到方法sort()中来进行排序。
首先按照第一中进行排序:
java程序如下:
按照年龄进行排序:
import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Student implements Comparable { private int id; private int age; private String name; public Student(int id,int age, String name){ this.id=id; this.age = age; this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Student [id=" + id + ", age=" + age + ", name=" + name + "]"; } public static void main(String args[]){ List<Student> list=new ArrayList<Student>(); for(int i=10;i>0;i--){ list.add(new Student(i,i+10,"小莉"+i)); } Collections.sort(list); for(Student s: list){ System.out.println(s+""); } } public int compareTo(Object o) { if(o instanceof Student){ Student s=(Student)o; if(this.age>s.age){ return 1; } else{ return 0; } } return -1; } }
结果如下:
Student [id=10, age=20, name=小莉10]
Student [id=9, age=19, name=小莉9]
Student [id=8, age=18, name=小莉8]
Student [id=7, age=17, name=小莉7]
Student [id=6, age=16, name=小莉6]
Student [id=5, age=15, name=小莉5]
Student [id=4, age=14, name=小莉4]
Student [id=3, age=13, name=小莉3]
Student [id=2, age=12, name=小莉2]
Student [id=1, age=11, name=小莉1]
按照第二种进行排序:
import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; public class ListSort { public static void main(String[] args) { ArrayList list = new ArrayList(); list.add("92"); list.add("68"); list.add("168"); list.add("242"); list.add("317"); list.add("105"); // 字符串排序 Collections.sort(list); System.out.println(list.toString()); // [105, 168.61, 242, 317, 68.9, 92.8] Collections.sort(list, new Comparator() { @Override public int compare(Object o1, Object o2) { return new Double((String) o1).compareTo(new Double((String) o2)); } }); System.out.println(list.toString()); // [68.9, 92.8, 105, 168.61, 242, 317] } }
结果为:
[105, 168, 242, 317, 68, 92]
[68, 92, 105, 168, 242, 317]