Suz*_*ioc 2 java collections hashmap
怎么可以AbstractMap.SimpleEntry同时
1)mutable(它的方法setValue()改变条目的值部分)
2)具有equals()/ hashCode()定义包括条目的值部分
3)成为Set<Map.Entry<T,K>> entrySet()结果的一部分
在我看来,这三点是有争议的.例如,前两个违反了Set<>接口契约,这不建议拥有该集合的可变元素.
我可以肯定,变异Value不会破坏地图吗?
为什么他们没有Entry只用钥匙进行比较和清洗呢?这会在某些情况下提高速度吗?
我敢肯定,Value的变异不会破坏地图吗?
是的,一点没错.该HashMap桶只考虑了项目的关键部分:
public V [More ...] put(K key, V value) {
if (key == null)
return putForNullKey(value);
int hash = hash(key.hashCode()); // <<== HERE
...
}
Run Code Online (Sandbox Code Playgroud)
为什么他们没有进入可比较和可按键的可用?这会在某些情况下提高速度吗?
该hashCode和equals的Map.Entry很少有相关性:只有当你想凑条目,他们将被用于外面的HashMap本身.在内部实现EntrySet供给的呼叫者Map.entrySet不使用hashCode/ equals入门-相反,他们只使用了关键部分的哈希码.以下是在条目集中查找对象的相关源代码的一部分:
public boolean contains(Object o) {
if (!(o instanceof Map.Entry))
return false;
Map.Entry<K,V> e = (Map.Entry<K,V>) o;
Entry<K,V> candidate = getEntry(e.getKey());
return candidate != null && candidate.equals(e);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
590 次 |
| 最近记录: |