所以我试图将插入排序与必须传入的通用比较器一起使用。我无法更改方法名称。我如何实现比较器传递给insertSort方法?我是java和面向对象编程的新手。
测试只是一个junit测试。
public class SortUtil {
public static <T> void insertionSort(ArrayList<T> dataSet, int left, int right, Comparator<? super T> Comparator)
{
for(int i = left + 1; i <= right; i++)
{
T item = dataSet.get(i);
int j;
if (dataSet != null)
{
for(j = i - 1; (j >= left) && (Comparator.compare(dataSet.get(j), item)) > 0; j--)
{
dataSet.set(j + 1, dataSet.get(j)) ;
}
dataSet.set(j + 1, item);
}
}
}
public void test() {
Comparator<? super T> Comp = null;
ArrayList<T> temp = (ArrayList<T>) SortUtil.generateBestCase(10);
SortUtil.insertionSort(temp, 0, temp.size(), Comp);
}
}
答案 0 :(得分:1)
insertionSort()
是通用的。它使用T
。 test()
不是。它应该使用您想要测试的任何特定类型。在test()
中,您不能制作Comparator<? super T>
,而是制作Comparator<Integer>
或Comparator<String>
或您喜欢的任何其他随机特定Comparator
,要求是类型必须与用于ArrayList temp
的类型的父类型相同(同样应该是ArrayList<Integer>
或ArrayList<String>
,或者等等。)< / p>
要创建自定义Comparator<Integer>
,请执行以下操作:
Comparator<Integer> comp = new Comparator<Integer>() {
public int compare(Integer i1, Integer i2) {
// Your code here. Check the documentation for how this should behave.
}
};