Java - HashMap.get()调用的代价是多少?

0 java hashmap

HashMap.get()调用有多贵?有问题的地图包含数百个映射,我希望在每秒60-1200次之间调用.get().

lpi*_*ora 8

HashMap.get()平均而言O(1),这意味着它非常有效.这种效率可能略有下降,具体取决于HashMap中的元素数量,但仍然应该非常高效.

如果你想取得良好的业绩,你要注意其正确地实现你的钥匙的hashCode方法,使物体被整个地图的水桶均匀分布.

这与HashMap的工作方式有关 - 过度简化了一下.

Java中的每个对象都有一个hashCode()equals()方法.当您将值放入HashMap时,它将计算它所属的存储桶.这是基于key传递给put(key,value)方法完成的.HashMap使用hashCode()键方法返回的值.

如果你只有键返回不同的哈希码(如果你有无限数量的桶),HashMap可以准确地告诉哪个键+值对存在于哪个桶中,但实际情况并非如此.

可能有多个键返回相同的哈希码(导致将它们放在同一个桶中),因此当HashMap找到具有多个元素的正确桶时,它将迭代所有键并用于equals()查找一个,这是请求.桶中的元素越少,检查越快.

因此,hashCode()实现越好,冲突越少,性能越好.当然,放入HashMap的元素越多,碰撞发生的可能性就越大.