繁体   English   中英

如何将entrySet链接到HashMap内部的表?

[英]How is entrySet linked to table in HashMap internals?

根据entrySet()上的HashMap文档:

public Set> entrySet()

在API级别1中添加返回包含此映射中所有映射的集合。 每个映射都是Map.Entry的一个实例。 由于该集由此映射支持,因此一个中的更改将反映在另一个中。

返回一组映射。

但是当我检查HashMap代码时,我无法理解字段entrySet如何链接到table或任何其他对象。
我试图了解调用put()方法时如何更新entrySet

EntrySetHashMap的嵌套类,请参阅源代码

我们来看看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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM