[英]Java ArrayList Comparator Implementation
我在實現排序時遇到了問題,我創建了一個類
@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());
但這僅一次
要比較兩個項目,您只需要一次比較即可。 只需嘗試三個項目,如果將其調用兩次,那么我認為一切正常。
如果列表中只有兩項,則僅調用一次該方法是有效的,因為在第一個比較本身中,該方法已排序。
Collections.sort中的排序算法是一種修改的mergesort (如果低子列表中的最高元素小於高子列表中的最低元素,則忽略合並)。 該算法提供了有保證的n log(n)性能。 此實現將指定的列表轉儲到數組中,對數組進行排序,然后遍歷列表,從數組中的相應位置重置每個元素。 這樣可以避免因嘗試對鏈表進行適當排序而導致的n2 log(n)性能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.