当HashMap搜索密钥时,它在2个位置使用密钥的哈希码:
在bucket中查找条目(openjdk7 HashMap get方法源码)
public V get(Object key) {
if (key == null)
return getForNullKey();
int hash = hash(key.hashCode());
for (Entry e = table[indexFor(hash, table.length)];
e != null;
e = e.next) {
Object k;
if (e.hash == hash && ((k = e.key) == key || key.equals(k)))
return e.value;
}
return null;
}
Run Code Online (Sandbox Code Playgroud)为什么HashMap正在检查桶内的哈希码?为什么仅仅检查存储桶内的引用和对象是否足够?
比较哈希码(已经计算过,因此不需要hashCode()再次调用该方法),这是int比较,通常比调用便宜equals.
由于存储桶可能包含具有不同哈希码的密钥(例如,在HashMap16个桶中,哈希码1和17将映射到同一个桶),首先比较哈希码可以节省运行等于的需要(当哈希码时)不相等).
这类似于(k = e.key) == key在调用之前检查引用equality()的优化equals.
| 归档时间: |
|
| 查看次数: |
62 次 |
| 最近记录: |