- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何 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.Entry
的hashCode
和equals
几乎没有相关性:只有当你想散列条目时才会使用它们在 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/
在 Java 中细读 AbstractMap 的源代码时,我遇到了这个: 440 /** 441 * Returns the hash code value for this m
如何 AbstractMap.SimpleEntry 同时 1) 可变(它的方法 setValue( )改变条目的值部分) 2) 有 equals()/hashCode()定义包括条目的值部分 3)
我在运行: OS X v10.8.4 eclipse 3.7.2 Java 1.6 Android minSdkVersion 17 Android targetSdkVersion 17 但是没有骰
Map结构图 Map public interface Map 1、 将键映射到值的对象一个映射不能包含重复的键;每个键最多只能映射到一个值; 2、 此接口取代Dictionary
containsValue() 在 AbstractMap 类中实现如下: public boolean containsValue(Object value) { Iterator> i =
给定, public class XHashMap extends AbstractMap implements Map { //impl } 我想要子类化 XHashMap 并让它继承的 Simp
在编写我自己的自定义 MultiHashMap、multiTreeMap 等类时(是的,我知道这些在 Guava 库中可用,但我需要提供一些不同的功能,所以我完全从头开始重写这些)我遇到需要编写一个
我正在尝试实现一个个人的abstractMap。我的项目中有两种类型的 map ,一种 >和一个 (盒子是一个类,用于将元素及其数量封装起来)。但是当我尝试 map 的 put 方法时,它向我显示“U
我需要创建一个公开 IDictionary 的对象界面,但我不想填写整个界面实现。 拥有与 Java 的 AbstractDictionary 等效的东西会很好,它让您几乎没有什么可以插入完整的字典(
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Java.util.HashMap — why HashMap extends AbstractMap an
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Java.util.HashMap — why HashMap extends AbstractMap an
现在,我正在使用 Guava 系列,一切都很好,很高兴。但是,我想了解为什么我自己的代码不起作用。我想我正在尝试做不可能的事情: 我创建了一个 SortedSet>数据结构。错误是我有时会在集合中得到
这个问题在这里已经有了答案: Why do many Collection classes in Java extend the abstract class and implement the i
我是一名优秀的程序员,十分优秀!