2013-09-25 5 views
0

У меня есть вопрос к реализации сортировки, что я сделал я создал классJava ArrayList Компаратор Реализация

@Override 
    public int compare(Object object1, Object object2) { 

     try { 
      Method method = object1.getClass().getDeclaredMethod("getStampDate"); 
      Date value = (Date) method.invoke(object1); 

      Method method1 = object1.getClass().getDeclaredMethod("getStampDate"); 
      Date value1 = (Date) method.invoke(object2); 

      //Date stamepDate1 = fetchStampDate(object1); 
      //Date stamepDate2 = fetchStampDate(object2); 

      if(value != null && value1 != null) 
      return compare(value, value1); 
     } 

Но когда я звоню

public void columnsList(List<TableRecord> records){ 
    Collections.sort(records, new StampDateComparator()); 
} 

компаратора вызывается только один раз, что я ожидал , TableRecord содержат переменную даты, этот метод сортировки будет сортироваться по дате, но Компаратор вызывает только один раз, что я делаю неправильно?

Для тестирования я добавил две записи в списке

List<TableRecord> records = new ArrayList<TableRecord>(); 
records.add(new MyClass()); 
records.add(new MyClass1()); 

Но это называется только один раз

+3

Сколько записей в вашем списке? –

+0

Он вызывается один раз для каждого элемента в списке. – duffymo

+0

@KevinBowersox, извините, но я хотел бы знать, как это зависит от количества записей в списке. –

ответ

0

Для сравнения двух элементов, нужно только одного сравнительная. Просто попробуйте с тремя пунктами, и если это будет называться 2 раза, то я думаю, что все работает правильно.

+0

Да, правда, но я я получаю метод сортировки, вы можете проверить логику сортировки, добавили еще код –

0

Если у вас есть только два элемента в списке, то верно, что он будет вызывать метод только один раз, так как в первом сравнении он сортируется.

сортировки алгоритм Collections.sort представляет собой модифицированный слияния (в которой слияние опущено, если наивысочайший элемент в нижнем подсписке меньше, чем самый низкий элемент в высоком подсписке). Этот алгоритм обеспечивает гарантированную производительность n log (n). Эта реализация выгружает указанный список в массив, сортирует массив и выполняет итерацию по списку, сбросив каждый элемент из соответствующей позиции в массиве. Это позволяет избежать производительности n2 log (n), которая возникла бы при попытке сортировать связанный список на месте.

+0

Спасибо, что вы можете проверить логику сортировки в comartor свой взгляд, багги мне –

+0

См. этот grepcode. http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/Arrays.java#Arrays.mergeSort%28java.lang.Object%5B%5D% 2Cjava.lang.Object% 5B% 5D% 2Cint% 2Cint% 2Cint% 2Cjava.util.Comparator% 29 –

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