我刚刚观察到,当我根据TreeMap
创建Date
作为关键字,并按日期排序时,remove(Date key)
或containsKey(Date key)
等函数不会即使日期在地图中存在,也能正常工作。此外,Date的equals函数效果很好。
那么,有谁知道它为什么不起作用?
我使用的是旧的Java 6u43,我创建了我的Map:
Map<Date, Integer> hourMap = new TreeMap<Date, Integer>(new Comparator<Date>() {
@Override
public int compare(Date d1, Date d2) {
return d1.after(d2) ? 1 : -1;
}
});
Date now = DateUtils.parseDate("04:00:00", "HH:mm:ss");
hourMap.put(now, 12);
hourMap.remove(now); // doesn't work
boolean test = hourMap.containsKey(now); // return false
答案 0 :(得分:6)
问题不是日期,而是你的破坏比较器(例如,如果两个日期相等则返回-1)。为什么不使用默认值?
Map<Date, Integer> hourMap = new TreeMap<Date, Integer>();
应该按预期工作。
作为参考,这是比较器在Date类中的实现方式(在Java 8中 - 不确定自Java 6以来它是否已更改):
long thisTime = getMillisOf(this);
long anotherTime = getMillisOf(anotherDate);
return (thisTime<anotherTime ? -1 : (thisTime==anotherTime ? 0 : 1));