Java 如何修复此泛型类型?

Java 如何修复此泛型类型?,java,generics,Java,Generics,在这段代码中,我尝试使用链表实现进行排序。我必须使用泛型类型,因为它可以是字符串或整数等。但我在主MergeSort.sortlist行中有错误消息。它说: MergeSort类型中的sortLinkedList方法不适用 对于参数LinkedList 如何修复此问题?您可以替换 public class MergeSort{ private static <T extends Comparable<T>> void merge(LinkedList<T&

在这段代码中,我尝试使用链表实现进行排序。我必须使用泛型类型,因为它可以是字符串或整数等。但我在主MergeSort.sortlist行中有错误消息。它说:

MergeSort类型中的sortLinkedList方法不适用 对于参数LinkedList

如何修复此问题?

您可以替换

public class MergeSort{

    private static <T extends Comparable<T>> void merge(LinkedList<T> outputSequence,
        LinkedList<T> leftSequence, LinkedList<T> rightSequence) {
        int i = 0; // Index into the left input sequence.
        int j = 0; // Index into the right input sequence.
        int k = 0; // Index into the output sequence.
        // While there is data in both input sequences
        while (i < leftSequence.size() && j < rightSequence.size()) {
            // Find the smaller and
            // insert it into the output sequence.
            T a = leftSequence.get(i);
            T b = rightSequence.get(j);
            if (a.compareTo(b) < 0) {
                outputSequence.set(k+1, leftSequence.get(i+1));
            } else {
                outputSequence.set(k+1, leftSequence.get(j+1));
            }
        }
        // assert: one of the sequences has more items to copy.
        // Copy remaining input from left sequence into the output.
        while (i < leftSequence.size()) {
            outputSequence.set(k+1, leftSequence.get(i+1));
        }
        // Copy remaining input from right sequence into output.
        while (j < rightSequence.size()) {
            outputSequence.set(k+1, leftSequence.get(j+1));
        }
    }

    public static <T extends Comparable<T>> void sort(LinkedList<T> list) {
        // A list with one element is sorted already.
        if (list.size()> 1) {
            // Split list into halves.
            int halfSize = list.size() / 2;
            //LinkedList<T> rightlist =  new Comparable[list.length - halfSize];
            // Sort the halves.
            LinkedList<T> leftlist = (LinkedList<T>) (list.subList(0,halfSize));
            LinkedList<T> rightlist = (LinkedList<T>) (list.subList(halfSize, list.size()-1));
            sort(leftlist);
            sort(rightlist);
            // Merge the halves.
            merge(list, leftlist, rightlist);
        }
    }

    public static void main(String[] args) {
        Integer[] arr = new Integer[] { 982,842,731,654,549,439,384,264,152,46 }; 
        LinkedList<Integer> list = new LinkedList<Integer>();
        for(int i=0;i<arr.length;++i) {
            list.add(arr[i]);
        }
        MergeSort.sort(list);
        System.out.println(list.toString());
    }
}


作为提示,请将排序开始时的链表转换为ArrayList或数组,否则getidx调用将破坏运行时。他们将打开运行时。我在运行代码时遇到一个不同的异常:线程主java.lang.ClassCastException中的异常:java.util.SubList不能转换为java.util.LinkedList。methode子列表返回类型列表而不是LinkedList的实例,因此将LinkedList的类型更改为List@Ackdari我的观点是看运行时间以及链表排序的预期时间。所以我必须使用链表。而且我还没有得到解决方案。我必须在主排序方法中编写什么?@Ackdari作为提示,或者只是使用迭代器。我已修复,但主排序列表行中仍然存在错误。
 LinkedList<T> leftlist = (LinkedList<T>) (list.subList(0, halfSize));
 LinkedList<T> rightlist = (LinkedList<T>) (list.subList(halfSize, list.size() -1)); 
  LinkedList<T> leftlist = new LinkedList<>(list.subList(0, halfSize));
  LinkedList<T> rightlist = new LinkedList<>(list.subList(halfSize, list.size() - 1));