Pie*_*ter 3 java collections data-structures
这段代码会产生意外的输出.
Hashtable<Pair, Integer> results = new Hashtable<Pair, Integer>();
results.put(new Pair(0, 1), 2);
System.out.println("[DBG] " + results.containsKey(new Pair(0, 1)));
Run Code Online (Sandbox Code Playgroud)
输出是[DBG] false.为什么没有Hashtable注册这个元素?它与我尝试传递Pair给哈希表的方式有关吗?
您必须覆盖hashCode()和equals(..)您的Pair类,以指示具有相同数字的两个对象相等.(最好让IDE为您生成这两种方法.)
Hashtable用于hashCode()确定对象的哈希并查找它.当您创建新Pair实例时,默认的哈希实现会Object生成不同的哈希,因此您Hashtable无法找到该对(在内部成功)
最后 - 用一个HashMap代替Hashtable.这是一个更新,更好的概念实现,并没有不必要的同步.