[英]How is entrySet linked to table in HashMap internals?
根据entrySet()
上的HashMap
文档:
public Set> entrySet()
在API级别1中添加返回包含此映射中所有映射的集合。 每个映射都是Map.Entry的一个实例。 由于该集由此映射支持,因此一个中的更改将反映在另一个中。
返回一组映射。
但是当我检查HashMap
代码时,我无法理解字段entrySet
如何链接到table
或任何其他对象。
我试图了解调用put()
方法时如何更新entrySet
。
EntrySet
是HashMap
的嵌套类,请参阅源代码 。
我们来看看EntrySet
的实现:
965 private final class EntrySet extends AbstractSet<Map.Entry<K,V>> {
966 public Iterator<Map.Entry<K,V>> iterator() {
967 return newEntryIterator();
968 }
969 public boolean contains(Object o) {
970 if (!(o instanceof Map.Entry))
971 return false;
972 Map.Entry<K,V> e = (Map.Entry<K,V>) o;
973 Entry<K,V> candidate = getEntry(e.getKey());
974 return candidate != null && candidate.equals(e);
975 }
976 public boolean remove(Object o) {
977 return removeMapping(o) != null;
978 }
979 public int size() {
980 return size;
981 }
982 public void clear() {
983 HashMap.this.clear();
984 }
985 }
请注意,它是一个内部类,并且可以隐式访问封闭HashMap
实例的所有状态和所有实例方法。 它通过在封闭的HashMap
上调用适当的方法来实现其方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.