java为什么HashMap比HashSet快?
我一直在阅读/研究HashMap
比HashSet
快的原因
我不太理解以下陈述:
HashMap
比HashSet
快,因为值与唯一键关联在
HashSet
中,成员对象用于计算两个对象的hashcode值,因此equals()
方法用于检查相等性。如果返回false
,则表示这两个对象不同。在HashMap
中,使用key对象计算hashcode值使用key对象计算
HashMap
hashcode值。这里,member对象用于计算hashcode,两个对象的hashcode可以相同,因此equals()
方法用于检查相等性。如果返回false
,则表示这两个对象不同
结束我的问题:
我认为
HashMap
和HashSet
以同样的方式计算hashcode。为什么它们不同您能否提供一个具体的例子,说明
HashSet
和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
# 1 楼答案
性能:
如果您查看HashSet的源代码(至少是JDK 6、7和8),它在内部使用HashMap,因此它基本上与示例代码完全相同
所以,如果你需要一个集合实现,你可以使用HashSet,如果你需要一个Map-HashMap。使用HashMap而不是HashSet的代码将具有与直接使用HashSet完全相同的性能
选择正确的收藏
映射-将键映射到值(关联数组)-http://en.wikipedia.org/wiki/Associative_array
集合-不包含重复元素的集合-http://en.wikipedia.org/wiki/Set_(computer_science)
如果你只需要检查集合中是否存在元素,那么就使用集合。你的代码会更清晰,让其他人更容易理解
如果需要为元素存储一些数据,请使用Map
# 2 楼答案
这些答案都不能真正解释为什么HashMap比HashSet快。它们都必须计算hashcode,但要考虑HashMap键的性质——它通常是一个简单的字符串,甚至是一个数字。计算该对象的哈希代码要比计算整个对象的默认哈希代码快得多。如果HashMap的键与存储在HashSet中的键是同一个对象,那么性能就不会有真正的差异。区别在于HashMap的键是什么类型的对象