的性能get()
取决于两件事:
看看的文档HashMap.get()
。映射包含键值对。为了找到正确的键值,使用了键的equals()
方法。在中HashMap
,要比较的键数通过使用哈希值来减少。因此hashCode()
,在您作为参数传递的键对象上仅执行一次。
然后,的实现HashMap
有几个可能要比较的关键对象(理想情况下只有一个)。这意味着它必须执行equals()
1到n次。
如果您具有Set
as键类型,则两者都会更复杂,因为它们会迭代Set
自身中包含的所有对象。看看执行的equals()
和hashCode()
的HashSet
和比较它的那些String
。
以您的示例为例:由于hashCode()
恰好执行一次,因此其影响比少equals()
。在第一个块中,您需要对其进行一次计算HashSet
,然后get()
再次对其进行计算Integer
(这实际上并不那么复杂)。这在hashCode()
零件上没有多大区别。第一个块要快得多,因为equals()
执行的是Integer
代替HashSet
,它要快得多。