import java.util.Arrays; import java.util.Comparator; import java.util.Random; /** * 你想对整数采用绝对值大小来排序, * Integer是不符合要求的, * 你不需要去修改Integer类(实际上你也不能这么做) * 去改变它的排序行为,只要使用一个实现 * 了Comparator接口的对象来实现控制它的排序就行了。 */ //绝对值升序排序; class AbsComparator implements Comparator { public int compare(Object o1, Object o2) { int v1 = Math.abs(((Integer) o1).intValue()); int v2 = Math.abs(((Integer) o2).intValue()); return v1 > v2 ? 1 : (v1 == v2 ? 0 : -1); } } //绝对值降序排序; class AbsComparator02 implements Comparator { public int compare(Object o1, Object o2) { int v1 = Math.abs(((Integer) o1).intValue()); int v2 = Math.abs(((Integer) o2).intValue()); return v1 > v2 ? -1 : (v1 == v2 ? 0 : 1); } } //可以用下面这个类测试AbsComparator: public class TreeSetTest { public static void main(String[] args) { //产生一个20个随机整数的数组(有正有负) Random rnd = new Random(); Integer[] integers = new Integer[20]; for (int i = 0; i < integers.length; i++) integers[i] = new Integer(rnd.nextInt(100) * (rnd.nextBoolean() ? 1 : -1)); System.out.println("用Integer内置方法排序:"); Arrays.sort(integers); System.out.println(Arrays.asList(integers)); System.out.println("用AbsComparator排序:"); Arrays.sort(integers, new AbsComparator()); System.out.println(Arrays.asList(integers)); System.out.println("用AbsComparator02排序:"); Arrays.sort(integers, new AbsComparator02()); System.out.println(Arrays.asList(integers)); } }
