package list; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; /** * 集合排序<br> * *<b>排序方式1:</b>让集合中的元素实现Comparable接口,并实现compareTo()方法,在方法中定义排序规则 <br> *compareTo() 返回 负整数、零或正整数,根据此对象是小于、等于还是大于指定对象 <br> *优点:简单 <br> *缺点:需要实现指定接口,一旦排序规则改变后需要修改compareTo()方法的实现 <br> * <b>排序方式2:</b>定制比较器,,编写额外类并实现Comparator接口,在compareTo()实现比较规则<br> * 优点:可扩展性好、灵活,当排序规则改变是只要重新定义一个实现Comparator接口的类即可 缺点:需要编写额外的类 * * @author xujt,2011-1-4 */ public class CollectionsSort { public static void main(String[] args) { List<MyObject> test = new ArrayList<MyObject>(); for (int i = 0; i < 8; i++) { test.add(new MyObject(8 - i)); } System.out.println("排序前"); for (int i = 0; i < 8; i++) { System.out.println(test.get(i).getCount()); } Collections.sort(test); System.out.println("排序方式1:排序后结果"); for (int i = 0; i < 8; i++) { System.out.println(test.get(i).getCount()); } // 颠倒顺序,重新排列 Collections.reverse(test); System.out.println("排序前"); for (int i = 0; i < 8; i++) { System.out.println(test.get(i).getCount()); } Collections.sort(test, new MyComparator()); System.out.println("排序方式2:排序后结果"); for (int i = 0; i < 8; i++) { System.out.println(test.get(i).getCount()); } } } /** * 测试对象 * * @author xujt,2010-1-4 */ class MyObject implements Comparable<MyObject> { private int count; public MyObject(int count) { this.count = count; } public int getCount() { return count; } public void setCount(int count) { this.count = count; } @Override public int compareTo(MyObject o) { if (this.count > o.getCount()) { // 大于 return 1; } else if (this.count < o.getCount()) { // 小于 return -1; } else { // 等于 return 0; } } } /** * 定制的比较器类 * * @author xujt,2010-1-4 */ class MyComparator implements Comparator<MyObject> { @Override public int compare(MyObject o1, MyObject o2) { if (o1.getCount() > o2.getCount()) { return 1; } else if (o1.getCount() < o2.getCount()) { return -1; } else { return 0; } } }