gpt4 book ai didi

java - Collections 实用程序类中排序函数的实现比较

转载 作者:行者123 更新时间:2023-12-04 05:36:22 26 4
gpt4 key购买 nike

我对 Java 中的泛型用法很陌生。

遇到以下函数进行排序 Collections.java类(class)

// Sorting based on Comparable
public static <T extends Comparable<? super T>> void sort(List<T> list) {
Object[] a = list.toArray();
Arrays.sort(a);
ListIterator<T> i = list.listIterator();
for (int j=0; j<a.length; j++) {
i.next();
i.set((T)a[j]);
}
}


// Sorting based on Comparator
public static <T> void sort(List<T> list, Comparator<? super T> c) {
Object[] a = list.toArray();
Arrays.sort(a, (Comparator)c);
ListIterator i = list.listIterator();
for (int j=0; j<a.length; j++) {
i.next();
i.set(a[j]);
}
}

我想了解的是:
  • 为什么是 ListIterator基于 Comparable 在排序函数中参数化以及为什么要生 ListIterator用于基于 Comparator 的排序功能?
  • for循环为什么在基于 T 的排序函数中需要类型转换(到 Comparable )以及为什么在 for 中不需要强制转换基于 Comparator 的排序函数循环?

  • 我觉得以下代码对于基于比较器的排序函数具有更多类型安全性:
    public static <T> void Sort(List<T> list, Comparator<? super T> c) {
    Object[] a = list.toArray();
    Arrays.sort(a, (Comparator)c);
    ListIterator<T> i = list.listIterator();
    for (int j=0; j<a.length; j++) {
    i.next();
    i.set((T)a[j]);
    }
    }

    最佳答案

    why raw ListIterator is used in sort function based on Comparator.



    您不能创建类型为 ? super T[] 的数组所以它会创建一个 Object[]并使用那里的原始类型。

    In the for loop why is Type Casting ( to T) needed in sort function based on Comparable and why casting is not necessary in for loop of sort function based on Comparator



    在第一种情况下,您有 ListIterator<T>只能 set(T)在第二种情况下,您有 ListIterator可以设置任何对象。

    关于java - Collections 实用程序类中排序函数的实现比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11879730/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com