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