首页 > 代码库 > 集合的排序

集合的排序

对于没有排序功能的集合来说,都可以使用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