元素的单个compareTo()
方法Comparable
不能被覆盖,除非定义一个单独的子类,Comparable
并且只将排序应用于该子类的实例。
对于泛型类型,在每次排序时Comparable
重写类的compare()
方法,提供对数组组件方法的访问。这是一个使用继承的快速实现和一个按升序或降序进行排序的选项:Comparator
compareTo()
Java
import java.util.Arrays;
import java.util.Comparator;
public class ArraySorter
{
private ArraySorter()
{
}
public static <T extends Comparable<T>> void sort(
final T[] array, final boolean ascending)
{
Arrays.sort(array, new Comparator<T>()
{
@Override
public int compare(T o1, T o2)
{
return (ascending?o1.compareTo(o2):o2.compareTo(o1));
}
});
}
public static void main(String[] args)
{
Integer[] intArray = {30,20,50,100,1,2,6,1,3,5};
System.out.println("UNSORTED: " + Arrays.asList(intArray));
ArraySorter.sort(intArray, true);
System.out.println("ASCENDING: " + Arrays.asList(intArray));
ArraySorter.sort(intArray, false);
System.out.println("DESCENDING: " + Arrays.asList(intArray));
}
}
sort()
使用该intArray
值运行上面的静态方法,就像类的main()
方法ArraySorter
一样,会产生以下输出:
UNSORTED: [30, 20, 50, 100, 1, 2, 6, 1, 3, 5]
ASCENDING: [1, 1, 2, 3, 5, 6, 20, 30, 50, 100]
DESCENDING: [100, 50, 30, 20, 6, 5, 3, 2, 1, 1]
当然,上面的结果,对于升序,与调用 相同Arrays.sort(intArray)
。