/**
 * 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并填充了元素。

java - 哈希图中的entrySet如何创建和修改?-LMLPHP

java - 哈希图中的entrySet如何创建和修改?-LMLPHP

最佳答案

Map.entrySet只会为您提供Map作为Set<Map.Entry<,>>的视图。它不会复制数据结构。 List.subList相同。 Arrays.asList应该是一个易于理解的示例。

在Java中,内部类具有两个(或多个)this(假设它们在静态上下文中不是本地类)。在Python中,按照惯例,self用于this。 (我没有做太多的Python。)因此,任何内部类方法都将隐藏外部自身。您将必须使用不同的名称,并且每次使用它们时都必须明确。在Java中,如果您不明确,则会选择适合的this(在特殊情况下可能会很奇怪)。

08-28 22:04