run*_*ode 14 java performance hashmap hashset
我一直在阅读/研究为什么HashMap比它更快的原因HashSet.
我不太了解以下陈述:
HashMap比HashSet因为值与唯一键相关联更快.
在HashSet,成员对象用于计算对于两个对象可以相同的哈希码值,因此使用equals()方法来检查相等性.如果返回false,则表示两个对象不同.在HashMap,使用密钥对象计算哈希码值.
的HashMap哈希码值使用的密钥对象进行计算.这里,成员对象用于计算哈希码,对于两个对象可以是相同的,因此使用equals()方法来检查相等性.如果返回false,则表示两个对象不同.
总结我的问题:
我以相同的方式思考HashMap并HashSet计算哈希码.他们为什么不同?
你能提供一个具体的例子,如何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
Run Code Online (Sandbox Code Playgroud)den*_*nis 19
性能:
如果你看一下HashSet的源代码(至少是JDK 6,7和8),它会在内部使用HashMap,所以它基本上就像你在使用示例代码一样.
因此,如果需要Set实现,则使用HashSet,如果需要Map - HashMap.使用HashMap而不是HashSet的代码与直接使用HashSet具有完全相同的性能.
选择合适的系列
Map - 将键映射到值(关联数组) - http://en.wikipedia.org/wiki/Associative_array.
Set - 不包含重复元素的集合 - http://en.wikipedia.org/wiki/Set_(computer_science).
如果您需要收集的唯一内容是检查其中是否存在元素 - 请使用Set.您的代码将更清晰,更易于理解.
如果您需要为元素存储一些数据 - 请使用Map.
这些答案都没有真正解释为什么HashMap 比 HashSet 快。他们都必须计算哈希码,但考虑一下 HashMap 键的性质——它通常是一个简单的字符串,甚至是一个数字。计算它的哈希码比整个对象的默认哈希码计算快得多。如果 HashMap 的键与存储在 HashSet 中的对象相同,则性能不会有真正的差异。不同之处在于 HashMap 的键是哪种对象。
| 归档时间: |
|
| 查看次数: |
20338 次 |
| 最近记录: |