gpt4 book ai didi

java - AbstractMap.SimpleEntry 如何可变?

转载 作者:行者123 更新时间:2023-11-30 06:18:48 28 4
gpt4 key购买 nike

如何 AbstractMap.SimpleEntry 同时

1) 可变(它的方法 setValue( )改变条目的值部分)

2) 有 equals()/hashCode()定义包括条目的值部分

3) 成为Set<Map.Entry<T,K>> entrySet()的一部分结果

在我看来,这三点是有争议的。例如,前两个违反了 Set<> 的契约(Contract)接口(interface),不建议使用集合的可变元素。

我可以确定,Value 的变异不会破坏 map ?

他们为什么不这样做 Entry仅可通过键进行比较和散列?这在某些情况下会提高速度吗?

最佳答案

I be sure, that mutating of Value won't break the map?

是的,绝对是。 HashMap 桶只考虑条目的关键部分:

public V  [More ...] put(K key, V value) {
if (key == null)
return putForNullKey(value);
int hash = hash(key.hashCode()); // <<== HERE
...
}

Why didn't they did Entry comparable and hashable by key only? This would increase speed in some cases?

Map.EntryhashCodeequals 几乎没有相关性:只有当你想散列条目时才会使用它们 HashMap 本身之外。提供给 Map.entrySet 调用者的 EntrySet 的内部实现不使用 hashCode/equals entry - 相反,他们只使用关键部分的哈希码。以下是在条目集中查找对象的相关源代码的一部分:

 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);
}

关于java - AbstractMap.SimpleEntry 如何可变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23959661/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com