我有一个实现排序的问题,我创建了一个类
@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());
但这只召唤一次
答案 0 :(得分:0)
要比较两个项目,您只需要单个比较。试试三个项目,如果它会被调用2次,那么我想,一切正常。
答案 1 :(得分:0)
如果列表中只有两个项目,那么它只调用一次方法是有效的,就像第一次比较本身一样。
Collections.sort中的排序算法是修改后的mergesort (如果低子列表中的最高元素小于高子列表中的最低元素,则省略合并)。该算法提供有保证的n log(n)性能。此实现将指定的列表转储到数组中,对数组进行排序,并迭代列表,从数组中的相应位置重置每个元素。这样可以避免尝试对链接列表进行排序所导致的n2 log(n)性能。