msa*_*yag 17 java collections java-9
Map.of()
和Collections.emptyMap()
之间List.of()
,Collections.emptyList()
和之间Set.of()
和之间是否存在差异Collections.emptySet()
?
jar*_*bjo 20
是的,甚至还有一些行为,而不是通过返回的集合彼此只是技术上的差异emptyXyz
在工厂方法Collections
类和新of
的接口(介绍工厂方法Map
,List
,Set
)与JDK 9,如果这些不带参数调用.
相关的区别是新of
工厂方法返回的集合不允许null
键和值(如List,Set和Map接口中的API文档中所指出的).这对于空集合来说可能听起来不那么重要,但即使它没有很清楚地记录,即使新集合实现中的访问器方法也检查空值.
一些不同的例子:
Collections.emptyList().contains(null)
将返回false,同时List.of().contains(null)
将抛出一个NullPointerException
.
Collection.emptyMap().getOrDefault(null, V)
会回来V
,而Map.of().getOrDefault(null, V)
会抛出一个NullPointerException
.
正如目前在Oracle的JDK 9中实现的那样,新工厂方法返回的集合中的至少以下方法将抛出NullPointerException
s,但表现得"理智"(如最初设计和指定集合类以支持null键和值)使用类中的旧工厂方法Collections
:
List.of().contains(null);
Set.of().contains(null);
Map.of().containsKey(null);
Map.of().containsValue(null);
Map.of().getOrDefault(null, <any>);