0

我有一个问题来实现我所做的排序我创建了一个类

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

但这只调用了一次

4

2 回答 2

0

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

于 2013-09-25T09:08:08.067 回答
0

如果列表中只有两个项目,那么它只会调用该方法一次是有效的,因为在第一次比较中它本身是排序的。

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

于 2013-09-25T09:08:10.003 回答