如何实现通用比较器?

时间:2016-02-15 23:01:11

标签: java generics

所以我试图将插入排序与必须传入的通用比较器一起使用。我无法更改方法名称。我如何实现比较器传递给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);






}

}

1 个答案:

答案 0 :(得分:1)

insertionSort()是通用的。它使用Ttest()不是。它应该使用您想要测试的任何特定类型。在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.
    }
};