例如
List list = new ArrayList();
list.add(new Object());
list.add(new Object());
Collections.sort(list, Collections.reverseOrder());
因为Collections.reverseOrder()返回的Comparator
public static Comparator reverseOrder() {
return REVERSE_ORDER;
}
private static final Comparator REVERSE_ORDER = new ReverseComparator();
/**
* @serial include
*/
private static class ReverseComparator implements Comparator,Serializable {
// use serialVersionUID from JDK 1.2.2 for interoperability
private static final long serialVersionUID = 7207038068494060240L;
public int compare(Object o1, Object o2) {
Comparable c1 = (Comparable)o1; //<----------ClassCastException
Comparable c2 = (Comparable)o2;
int cmp = c1.compareTo(c2);
/*
* We can't simply return -cmp, as -Integer.MIN_VALUE ==
* Integer.MIN_VALUE.
*/
return -(cmp | (cmp >>> 1));
}
}
这是JDK1.4的代码,如果1.5的话,直接范型
public int compare(Comparable<Object> c1, Comparable<Object> c2) {
return c2.compareTo(c1);
}
所以,如果只是想打印,而并不像改变原来内容的话,
for (int i = list.size(); i-- > 0; ) {
Object obj = list.get(i);
}