java - 为什么 Map 不能使用日期作为键?

标签 java date dictionary treemap

我刚刚在创建 TreeMap 时观察到基于Date作为键,并按日期排序,函数如 remove(Date key)containsKey(Date key)即使日期在 map 上很好地显示,也不起作用。另外,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

最佳答案

问题不在于日期,而在于损坏的比较器(例如,如果两个日期相等,则返回 -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));

关于java - 为什么 Map 不能使用日期作为键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38127360/

相关文章:

java - 使用 ServletRegistration.Dynamic 可以配置什么?

java - Quartz Scheduler - Cron 触发器表达式不起作用

date - 我如何根据用户的时间显示诸如早安、下午或晚上之类的问候语

r - 使用 R 中的 data.table 将 POSIXct 列连接到日期列

php - Ubuntu 13.10 Symfony 安装日期时间问题

python - 有效地就地过滤字典

java - 警报窗口中从服务器到客户端的消息

c++ - 将类型作为函数的参数 C++

python - 字典理解 Python

java - 如何使用属性从 .txt 文件取回 map ?