繁体   English   中英

使用自定义类正确使用Hashtable

[英]Correct use of Hashtable with custom class

这段代码会产生意外的输出。

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

输出为[DBG] false 为什么Hashtable无法注册此元素? 它是否与我尝试将Pair传递给哈希表的方式有关?

您必须覆盖Pair类的hashCode()equals(..)以指示具有相同数字的两个对象相等。 (最好让IDE为您生成这两种方法。)

Hashtable使用hashCode()来确定对象的哈希并查找它。 当您创建一个新的Pair实例时, Object的默认哈希实现会生成一个不同的哈希,因此您的Hashtable无法找到该对(在内部成功)

最后 - 使用HashMap而不是Hashtable 它是一个更新,更好的概念实现,并没有不必要的同步。

它是通过使用new Pair(0,1)创建两个不同的对象引起的。 所以你有两个选择来实现:

第一个是你应该实现hashCode并且等于Pair类的方法。

第二个使用相同的对象,如下所示:

Hashtable<Pair, Integer> results = new Hashtable<Pair, Integer>();
Pair key=new Pair(0, 1)
results.put(key, 2);
System.out.println("[DBG] " + results.containsKey(key));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM