【问题标题】:Sorting generic data structure array对通用数据结构数组进行排序
【发布时间】:2014-06-05 17:35:19
【问题描述】:

我有一个包含数组的泛型类。该数组可以是任何数据类型(Double,Integer,String ...),我正在尝试学习如何在构造后对该数组进行排序。我写了一个排序方法,用于在构造后对数组进行排序。但是,由于不匹配,java 禁止使用 mysort 方法对泛型数组进行排序。

public class SortingTest<E> {

    private E[] array;
    //constructor which creates an object and sorts its array via mysort method.
    public SortingTest(E[] N){
        this.array = N;
        mysort(this.array);
    }
    //sorts array.
    private static<T extends Comparable<T>> void mysort(T[] arr){
        T temp = null;
        //Bubble sort increasing order.
        for(int j=0; j<arr.length; j++){
            for(int i=1; i<arr.length; i++){
                if(arr[i-1].compareTo(arr[i]) > 0 ){
                    temp = arr[i-1];
                    arr[i-1] = arr[i];
                    arr[i] = temp;

                }
            }
        }
    }
}

我该如何克服这个问题?任何帮助表示赞赏。

【问题讨论】:

  • 想想你在构造函数中传递给mysort(..) 的内容。它是什么类型的?它是否与方法设置的界限相匹配。
  • 它可以是我所说的任何类型。 @Luiggi Mendoza 解决了由 Comparable 接口的未知实现引起的问题,非常感谢您的帮助。
  • 顺便说一句,请注意泛型和数组不能很好地配合使用。使用 Lists 和 Collections Framework 的其余部分,您将有更好的时间。

标签: java arrays sorting generics interface


【解决方案1】:

mysort 方法需要泛型元素T 实现Comparable&lt;T&gt;,但泛型E 没有声明实现Comparable&lt;E&gt;。将声明更改为:

public class SortingTest<E extends Comparable<? super E>> {
    //rest of your code...
}

【讨论】:

  • 我认为如果你做“E extends Comparable”来覆盖父类实现Comparable的情况会更好。很抱歉,如果这很挑剔。
  • 它们有什么区别?使用 super 关键字有什么好处吗? @pscuderi
  • @Sixie 表示如果泛型类E 扩展自另一个类SE 并且SE 是实现Comparator&lt;SE&gt; 的类,那么E 将不需要实现Comparator&lt;E&gt; 本身,因为已经实现了 Comparator&lt;SE&gt;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多