【问题标题】:Generic insertionSort using a Comparator object as a parameter?使用 Comparator 对象作为参数的通用插入排序?
【发布时间】:2026-02-16 12:25:01
【问题描述】:

如果给我这个方法头:

/**
 * This generic method sorts the input array using an insertion sort and the input Comparator object.
 */
public static <T> void insertionSort(T[] array , Comparator<? super T> comparatorObj){

        // Implement method
}

对于参数中的Comparator&lt;? super T&gt; comparatorObj 部分,我是否想制作一个比较器对象方法,告诉它在insertionSort 参数中使用时应该如何比较?

【问题讨论】:

    标签: java generics comparator superclass insertion-sort


    【解决方案1】:

    你应该传入一个Comparator 对象。本质上,你只需要实现方法

    int compare(T obj1, T obj2)
    

    谷歌一些例子,例如http://www.tutorialspoint.com/java/java_using_comparator.htm

    【讨论】:

      【解决方案2】:

      试试这个

      public static <T>
      void insertionSortGeneric(T[] a, Comparator<? super T> c) {
         for (int i=0; i < a.length; i++) {
          /* Insert a[i] into the sorted sublist */
          T v = a[i];
          int j;
          for (j = i - 1; j >= 0; j--) {
              if (c.compare(a[j], v) <= 0) break;
              a[j + 1] = a[j];
          }
          a[j + 1] = v; }}
      

      【讨论】:

      • 你根本没有回答OP的问题。
      • 在你的代码中使用这个 sn-p 它肯定会工作,只需使用循环打印一个。
      • 我在问我是否需要创建一个 Comparator 对象来告诉如何比较通用数组中的元素。
      • @ProjectDefy 除非您将 T 限制为本质上可比较,即 public static &lt;T extends Comparable&lt;T&gt;&gt; ...,然后是的,您需要指定一些外部方法来比较数组元素。