Map.keySet何时返回null

时间:2018-05-07 09:59:18

标签: java dictionary null set

我正在阅读一些代码,用于检查Map.keySet返回的值是否为null。 javadoc没有说明Map.keySet的返回值。如果地图不包含任何内容,则为空集。

Map.keySet返回的值何时可以null

2 个答案:

答案 0 :(得分:3)

这绝对是您所指代码的作者对Map.keySet缺乏了解。正如您所提到的,java doc明确没有声明keySet方法将返回null

举个例子,我刚看了HashMap方法的keySet实现,它定义为:

public Set<K> keySet() {
      Set<K> ks = keySet;
      if (ks == null) {
          ks = new KeySet();
          keySet = ks;
      }
      return ks;
}

因此,正如您所看到的,从方法返回的值永远不会为空。

我还检查了keySet方法的其他几个实现,例如对于TreeMapConcurrentHashMap等,但找不到任何会返回null的内容。

答案 1 :(得分:2)

Map.keySet永远不应该返回null。文档中隐含keySet绝不能null,因为其内容&#34;跟踪&#34; Map的内容:

  

集合由地图支持,因此对地图的更改会反映在集合中,反之亦然。

如果keySet被允许返回null,则无法实现。

Java中Map的标准实现HashMapTreeMap不会从null返回keySet。由于Map是一个接口,因此可能会针对null返回keySet的错误实现。但是,为这种远程可能性编程并不是一个好主意。