2016-02-15 5 views
0

Так что я пытаюсь использовать сортировку вставки с общим компаратором, который должен быть передан. Я не могу изменить имя метода. Как мне пойти на внедрение компаратора для перехода в метод insertionSort? Я новичок в Java и объектно-ориентированном программировании.Как реализовать общий компаратор?

Тест - это всего лишь тест на юниты.

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

Как объекты вы передаете в сравнение друг с другом? Будет ли смысл пытаться выполнить вызов «.equals»? – Makoto

+0

Он должен иметь возможность сравнивать любой переданный тип, будь то его строки или целые числа, чтобы отсортировать их. – cjoy

+0

Я также должен использовать Comparator.compare для сортировки. – cjoy

ответ

1

insertionSort() является общим. Он использует T. test() нет. Он должен использовать любой конкретный тип, с которым вы хотите протестировать. В test() вы не делаете Comparator<? super T>, вы делаете Comparator<Integer> или Comparator<String> или любые другие случайные Comparator, которые вам нравятся, единственное требование - тип должен быть таким же, как и у родителя того типа, который вы используете для ArrayList temp (который также должен быть ArrayList<Integer> или ArrayList<String> или т. д.).

Чтобы создать пользовательский 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. 
    } 
}; 
+0

Спасибо, что теперь больше смысла. Я по-прежнему получаю сообщение об ошибке при попытке использовать компаратор. Должен ли я сделать собственный переопределяющий компаратор в моем методе insertionSort? – cjoy

+0

@cjoy 'insertionSort' должно быть хорошо, как есть. Как вы создаете 'Comparator' в' test() '? – Douglas

+0

Я использую компаратор Comp = null; Это давало мне исключение nullpoint, когда оно запускается. Comparator.compare – cjoy

Смежные вопросы