Java推断类型和列表:使用通用快速排序示例
我将在Rosettacode上介绍用Java实现的快速排序。据我所知,这应该包含一系列实现可比较接口的东西,并且类型是在运行时推断出来的。我用一个main方法将其封装在一个小类中,但是得到了大量关于推断类型的错误。我对Java比较陌生,还不熟悉这个结构Java推断类型和列表:使用通用快速排序示例,java,list,quicksort,comparable,inferred-type,Java,List,Quicksort,Comparable,Inferred Type,我将在Rosettacode上介绍用Java实现的快速排序。据我所知,这应该包含一系列实现可比较接口的东西,并且类型是在运行时推断出来的。我用一个main方法将其封装在一个小类中,但是得到了大量关于推断类型的错误。我对Java比较陌生,还不熟悉这个结构 import java.util.List; import java.util.LinkedList; public class QuickSortExample { public static <E extends Comp
import java.util.List;
import java.util.LinkedList;
public class QuickSortExample {
public static <E extends Comparable<? super E>> List<E> quickSort(List<E> arr) {
if (arr.size() <= 1) return arr;
E pivot = arr.getFirst();
List<E> less = new LinkedList<E>();
List<E> pivotList = new LinkedList<E>();
List<E> more = new LinkedList<E>();
for (E i: arr) {
if (i.compareTo(pivot) < 0) less.add(i);
else if (i.compareTo(pivot) > 0) more.add(i);
else pivotList.add(i);
}
less = quickSort(less);
more = quickSort(more);
less.addAll(pivotList);
less.addAll(more);
return less;
}
public static void main(String[] args){
int[] myArray = new int[]{2,3,1,6,2,87,5,3,546,9,2,3,8,111};
int[] mySortedArray = quickSort(myArray);
System.out.println(mySortedArray);
}
}
import java.util.List;
导入java.util.LinkedList;
公共类快速排序示例{
公共静电
快速排序方法接受类型为X
的对象的列表
,并返回类型为X
的列表
。类型X
应与类型为X
的泛型实现可比
接口
可以使用方法Arrays.asList()
将数组转换为列表
方法契约中没有提到LinkedList
,您可以将任何类型的List
传递给quickSort
方法,它将返回List
类型的对象LinkedList
是该方法内部使用的List
的实现
例:
Integer[]arr={1,2,3};
List asList=Arrays.asList(arr);
快速排序(asList);
我已将main方法中的代码更改为以下代码:
public static void main(String[] args){
Integer[] arr = {2,3,1,6,2,87,5,3,546,9,2,3,8,111};
List<Integer> asList = Arrays.asList(arr);
List<Integer> mySortedArray = quickSort(asList);
System.out.println(mySortedArray);
}
publicstaticvoidmain(字符串[]args){
整数[]arr={2,3,1,6,2,87,5,3546,9,2,3,8111};
List asList=Arrays.asList(arr);
List mySortedArray=快速排序(asList);
System.out.println(mySortedArray);
}
该算法现在运行得很好。非常感谢,还有一个问题,该方法似乎需要传入LinkedList,因为调用了getFirst()。Davids iMac:Java david$javac QuickSort.Java QuickSort.Java:10:找不到符号符号符号:方法getFirst()位置:接口Java.util.List E pivot=arr.getFirst()^1错误
但是如果我试图将asList转换为LinkedList,我会得到一个不兼容的类型错误。我应该如何考虑协调这一错误?在Java中,是否可以制作一个通用的快速排序,以接收实现List接口的任何内容?
<E extends Comparable<? super E>> List<E> quickSort(List<E> arr)
Integer[] arr = { 1, 2, 3 };
List<Integer> asList = Arrays.asList(arr);
quickSort(asList);
public static void main(String[] args){
Integer[] arr = {2,3,1,6,2,87,5,3,546,9,2,3,8,111};
List<Integer> asList = Arrays.asList(arr);
List<Integer> mySortedArray = quickSort(asList);
System.out.println(mySortedArray);
}