Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么排序采用对象数组?_Java_Arrays_Sorting_Comparator_Comparable - Fatal编程技术网

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;
            }
        });
    }