Java ArrayList比较器实现

时间:2013-09-25 08:56:15

标签: java

我有一个实现排序的问题,我创建了一个类

 @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());

但这只召唤一次

2 个答案:

答案 0 :(得分:0)

要比较两个项目,您只需要单个比较。试试三个项目,如果它会被调用2次,那么我想,一切正常。

答案 1 :(得分:0)

如果列表中只有两个项目,那么它只调用一次方法是有效的,就像第一次比较本身一样。

Collections.sort中的排序算法是修改后的mergesort (如果低子列表中的最高元素小于高子列表中的最低元素,则省略合并)。该算法提供有保证的n log(n)性能。此实现将指定的列表转储到数组中,对数组进行排序,并迭代列表,从数组中的相应位置重置每个元素。这样可以避免尝试对链接列表进行排序所导致的n2 log(n)性能。