对于没有排序功能的集合来说,都可以使用java.util.Collections.sort()方法进行排序,它除了集合对象以外,还需要提供一个比较器。如果列表中的元素全部都是相同的类型,并且这个类实现了Comparable接口,就可以简单的调用Collections.sort()方法,如果这个类没有实现comparable接口,那么可以创建一个比较器传递一个Comparator实例作为Sort()的第二个参数进行排序,另外,如果不想使用默认的分类顺序进行排序,同样也可以传递一个Comparator实例作为参数来进行排序。
package Bible001; import java.util.*; //类通过实现comparable接口进行排序和利用创建比较器进行排序。 public class SortTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub List<Student> list=new ArrayList<Student>(); list.add(new Student("stu001",21)); list.add(new Student("stu003",29)); list.add(new Student("stu002",25)); list.add(new Student("stu004",23)); System.out.println("--------原始顺序---------"); for(Iterator<Student> it=list.iterator();it.hasNext();) System.out.println(it.next().toString()); System.out.println("---------默认排列---------"); Collections.sort(list); for(Iterator<Student> it=list.iterator();it.hasNext();) System.out.println(it.next().toString()); System.out.println("---------降序排列-----"); Comparator<Student> comp=Collections.reverseOrder(); Collections.sort(list,comp); for(Iterator<Student> it=list.iterator();it.hasNext();) System.out.println(it.next().toString()); System.out.println("---------名字排序----------"); Collections.sort(list,new Comparator<Student>(){ @Override public int compare(Student s1, Student s2) { // TODO Auto-generated method stub return s1.getName().compareTo(s2.getName()); } }); for(Iterator<Student> it=list.iterator();it.hasNext();) System.out.println(it.next().toString()); } } class Student implements Comparable<Student>{ private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } private int age; public Student(String name,int age){ this.name=name; this.age=age; } @Override public int compareTo(Student stu) { // TODO Auto-generated method stub if(this.age>stu.age) return 1; else if(this.age<stu.age) return -1; else return 0; } public String toString(){ return name+‘_‘+age; } }
输出:
--------原始顺序---------
stu001_21
stu003_29
stu002_25
stu004_23
---------默认排列---------
stu001_21
stu004_23
stu002_25
stu003_29
---------降序排列-----
stu003_29
stu002_25
stu004_23
stu001_21
---------名字排序----------
stu001_21
stu002_25
stu003_29
stu004_23