根据Effective Java,第22项,
许多Map实现都为地图中的每个键值对都有一个内部Entry对象。 虽然每个条目都与一个地图相关联,但是条目上的方法 (getKey,getValue和setValue)不需要访问地图。
你能解释一下这意味着什么吗?您能举例说明典型的Map实现,以显示这些函数如何不依赖于Map内部结构吗?
答案 0 :(得分:2)
这是java.util.HashMap.Entry实现
static class Entry<K,V> implements Map.Entry<K,V> {
final K key;
V value;
Entry<K,V> next;
final int hash;
...
public final K getKey() {
return key;
}
public final V getValue() {
return value;
}
public final V setValue(V newValue) {
V oldValue = value;
value = newValue;
return oldValue;
}
...
正如您所看到的,getKey,getValue和setValue仅适用于Entry的字段,并且不需要访问HashMap本身。
但是HashMap当然需要访问它的条目,因此它将它们作为数组保存在字段中
public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable {
...
Entry[] table;
...
答案 1 :(得分:0)
地图包含许多Entry
个对象。您可以将Entry视为键值对。
它是Map包含的条目和条目,没有任何访问Map的权限。
Entry可以访问自己的字段,但不能访问hashmap中的其他条目,即条目可以为其自己的包含字段提供getter和setter,并且无权访问HashMap。