Java 为什么排序采用对象数组?
我刚刚在Java 为什么排序采用对象数组?,java,arrays,sorting,comparator,comparable,Java,Arrays,Sorting,Comparator,Comparable,我刚刚在java.util.array中偶然发现了以下sort重载: public static void sort(Object[] a) public static <T> void sort(T[] a, Comparator<? super T> c) 公共静态无效排序(对象[]a) 公共静态无效排序(T[]a,Comparator第一种方法(无效排序(Object[]a))不是泛型的,因为: 它是在泛型出现在Java 它实际上不需要泛型 第二种方法需要泛型,
java.util.array
中偶然发现了以下sort
重载:
public static void sort(Object[] a)
public static <T> void sort(T[] a, Comparator<? super T> c)
公共静态无效排序(对象[]a)
公共静态无效排序(T[]a,Comparator第一种方法(无效排序(Object[]a)
)不是泛型的,因为:
它是在泛型出现在Java
它实际上不需要泛型
第二种方法需要泛型,我认为,只有由于这种构造Comparator第一种方法如果是泛型的话可能会更好,但它会破坏与1.5版本之前代码的兼容性:
static <T extends Comparable<T>> void sort(T[] a) {
...
}
static void main(String[] args) {
Object[] a = {"1", "2"};
sort(a); <- compile time error, need explicit cast sort((Comparable[])a);
}
静态无效排序(T[]a){
...
}
静态void main(字符串[]参数){
对象[]a={“1”,“2”};
排序(a);可能是在引入泛型之前存在的第一个吗?@Oli在引入泛型之前可能仍然需要一个可比的[]
,对吧?注意TreeSet
具有相同的“奇异性”:您实际上可以创建一个TreeSet
,而类没有实现Comparable
,但是在运行时您会得到ClassCastException
。不过数组是另一个问题,因为a[]
与B[]不同
在运行时,与泛型集合不同。@fge:我认为是出于兼容性的原因,TreeSet
在提供比较器的情况下获取不实现Comparable
的元素
public static <T> void sort(T[] a, Comparator<? super T> c) {
...
}
public static void main(String[] args) throws Exception {
Object[] a = { "1", "2" };
sort(a, new Comparator() { <-- warning
@Override
public int compare(Object o1, Object o2) {
return 0;
}
});
}