/**
* Holds cached entrySet(). Note that AbstractMap fields are used
* for keySet() and values().
*/
transient Set<Map.Entry<K,V>> entrySet;
我在Java Hashmap中发现了一件奇怪的事情。我找不到在hashmap源代码和AbstractMap代码中创建实例并操作entrySet的代码。但是,当我将键值放在hashmap中时,entrySet获取新值。真奇怪。
所以我的问题是:
entrySet如何获取新值,以及何时获取其实例?
更清楚地说,我在IDE中添加了调试代码,并在首次调用此集之前发现它已经不为null并填充了元素。
最佳答案
Map.entrySet
只会为您提供Map
作为Set<Map.Entry<,>>
的视图。它不会复制数据结构。 List.subList
相同。 Arrays.asList
应该是一个易于理解的示例。
在Java中,内部类具有两个(或多个)this
(假设它们在静态上下文中不是本地类)。在Python中,按照惯例,self
用于this
。 (我没有做太多的Python。)因此,任何内部类方法都将隐藏外部自身。您将必须使用不同的名称,并且每次使用它们时都必须明确。在Java中,如果您不明确,则会选择适合的this
(在特殊情况下可能会很奇怪)。