我一直在阅读/研究原因HashMap
比HashSet
.
我不太明白以下说法:
HashMap
比HashSet
因为这些值与唯一的键相关联。
In HashSet
,成员对象用于计算两个对象的哈希码值可以相同,因此equals()
方法用于检查相等性。如果返回的话false
,这意味着两个对象是不同的。在HashMap
,使用 key 对象计算 hashcode 值。
The HashMap
hashcode 值是使用 key 对象计算的。这里,成员对象是用来计算hashcode的,两个对象的hashcode可以是相同的,所以equals()
方法用于检查相等性。如果返回的话false
,这意味着两个对象是不同的。
总结我的问题:
我想HashMap
and HashSet
以同样的方式计算哈希码。为什么它们不同?
你能提供一个具体的例子吗HashSet
and HashMap
计算哈希码的方式不同?
我知道什么是“关键对象”,但是“成员对象”是什么意思?
-
HashMap
可以做同样的事情HashSet
,而且速度更快。为什么我们需要HashSet
?例子:
HashMap <Object1, Boolean>= new HashMap<Object1, boolean>();
map.put("obj1",true); => exist
map.get("obj1"); =>if null = not exist, else exist
表现:
如果您查看 HashSet 的源代码(至少是 JDK 6、7 和 8),它在内部使用 HashMap,因此它基本上完全按照您对示例代码所做的操作。
因此,如果您需要 Set 实现,则使用 HashSet,如果您需要 Map - HashMap。使用 HashMap 而不是 HashSet 的代码将具有与直接使用 HashSet 完全相同的性能。
选择正确的集合
映射 - 将键映射到值(关联数组) -http://en.wikipedia.org/wiki/Associative_array http://en.wikipedia.org/wiki/Associative_array.
Set - 不包含重复元素的集合 -http://en.wikipedia.org/wiki/Set_(computer_science) http://en.wikipedia.org/wiki/Set_(computer_science).
如果您需要集合的唯一目的是检查其中是否存在元素 - 请使用 Set。您的代码将更清晰,更容易被其他人理解。
如果您需要为元素存储一些数据 - 使用 Map。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)