下面的程序使用定制的比较器,对一个由随机挑选的Integer实例组成的数组进行排序,然后打印了一个描述了数组顺序的单词。回忆一下,Comparator接口只有一个方法,即compare,它在第一个参数小于第二个参数时返回一个负数,在两个参数相等时返回0,在第一个参数大于第二个参数时返回一个整数。这个程序是展示5.0版特性的一个样例程序。它使用了自动包装和解包、泛型和枚举类型。那么,它会打印出什么呢? import java.util.*. public class SuspiciousSort { public static void main(String[ ] args) { Random rnd = new Random(). Integer[ ] arr = new Integer[100]. for (int i = 0. i < arr.length. i ) arr[i] = rnd.nextInt(). Comparator cmp = new Comparator() { public int compare(Integer i1, Integer i2) { return i2 - i1. } }. Arrays.sort(arr, cmp). System.out.println(order(arr)). }
enum Order { ASCENDING, DESCENDING, CONSTANT, UNORDERED }.
static Order order(Integer[ ] a) { boolean ascending = false. boolean descending = false. for (int i = 1. i < a.length. i ) { ascending |= a[i] > a[i-1]. descending |= a[i] < a[i-1]. } if (ascending &.&. !descending) return Order.ASCENDING. if (descending &.&. !ascending) return Order.DESCENDING. if (!ascending) return Order.CONSTANT. // All elements equal return Order.UNORDERED. // Array is not sorted } }