Java API针对集合类型排序提供了两种支持:
java.util.Collections.sort(java.util.List)
java.util.Collections.sort(java.util.List, java.util.Comparator)
第一个方法要求所排序的元素类必须实现java.lang.Comparable接口。
第二个方法要求实现一个java.util.Comparator接口。
java.lang.Comparable接口和java.util.Comparator接口是Java对排序最提供最基本支持。这两个接口不但可以用于集合元素排序,还可以用于数组排序。
/**
* @(#) Student.java Created on 2013-1-7
*
* Copyright (c) 2013 Aspire. All Rights Reserved
*/
package com.braver.test;
import java.util.Comparator;
/**
* The class <code>Student</code>
*
* @author ouyangfeng
* @version 1.0
*/
public final class Student {
private String name;
private int age;
/**
* Constructor
*
* @param name
* @param age
*/
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
/**
* Getter of name
*
* @return the name
*/
public String getName() {
return name;
}
/**
* Setter of name
*
* @param name
* the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* Getter of age
*
* @return the age
*/
public int getAge() {
return age;
}
/**
* Setter of age
*
* @param age
* the age to set
*/
public void setAge(int age) {
this.age = age;
}
/**
* {@inheritDoc}
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
final StringBuilder builder = new StringBuilder();
builder.append("name:").append(name).append(" age:").append(age);
return builder.toString();
}
public static final class StudentComparator implements Comparator<Student> {
/**关键点在这里
* {@inheritDoc}
*
* @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
*/
@Override
public int compare(Student o1, Student o2) {
// if (o1.getAge() < o2.age)
// return -1;
// else if (o1.getAge() == o2.getAge())
// return 0;
// else
// return 1;
return o1.getName().compareTo(o2.getName());
}
}
}
测试方法
/**
* @(#) StudentMain.java Created on 2013-1-7
*
* Copyright (c) 2013 Aspire. All Rights Reserved
*/
package com.braver.test;
import java.util.ArrayList;
import java.util.Collections;
import com.braver.test.Student.StudentComparator;
/**
* The class <code>StudentMain</code>
*
* @author ouyangfeng
* @version 1.0
*/
public final class StudentMain {
/**
* @param args
*/
public static void main(String[] args) {
Student student = new Student("aname1", 18);
Student student2 = new Student("dname2", 19);
Student student3 = new Student("bname3", 20);
ArrayList<Student> list = new ArrayList<Student>();
list.add(student);
list.add(student2);
list.add(student3);
Collections.sort(list, new StudentComparator());
for(Student stu : list){
System.out.println(stu);
}
}
}