簡體   English   中英

Java ArrayList比較器實現

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM