Java ConcurrentHashmap size()方法是否计算空键?

Java ConcurrentHashmap size()方法是否计算空键?,java,maps,Java,Maps,假设我有一个concurrenthashmap,其中一些键和值不是空的。以后这些键可能会变为null,那么会发生什么呢?它们是自动从concurrenthashmap中删除,还是作为null保留在那里?size()方法是否计算它们?大多数Java映射可以包含空值 以下代码完全有效,并将返回1的大小 Map m = new HashMap<String, String>(); m.put("foo", null); System.out.println(m.size()); //wil

假设我有一个
concurrenthashmap
,其中一些键和值不是空的。以后这些键可能会变为null,那么会发生什么呢?它们是自动从
concurrenthashmap
中删除,还是作为
null
保留在那里?
size()
方法是否计算它们?

大多数Java映射可以包含空值

以下代码完全有效,并将返回1的大小

Map m = new HashMap<String, String>();
m.put("foo", null);
System.out.println(m.size()); //will print "1"
Map m=newhashmap();
m、 put(“foo”,null);
System.out.println(m.size())//将打印“1”
这是因为HashMap允许空值

然而,根据我的测试,以下代码将无法工作

Map m = new ConcurrentHashMap<String, String>();
m.put("foo", null); //Will throw a NullPointerException
Map m=新的ConcurrentHashMap();
m、 put(“foo”,null)//将抛出NullPointerException
这显然是因为ConcurrentHashMap不允许空值

根据Javadoc():

一些映射实现对它们可能包含的键和值有限制。例如,有些实现禁止空键和值,有些实现对其键的类型有限制


好了,就这样。希望这有帮助:)

来自ConcurrentHashMap API:


与Hashtable类似,但与HashMap不同,该类不允许将null用作键或值

你能用一个完整的句子吗?您的问题目前还不清楚。假设我有一个带有一些键(以及C和NOTNULL的值)的concurrenthashmap,之后这些键会变成null,那么会发生什么?它们会自动从concurrenthashmap中删除吗?他们呆在这里是空的吗?size()方法计算它们?什么?只是想补充一下,
ConcurrentHashMap
的javadoc明确地说明了这一点:“像
Hashtable
但不像
HashMap
,此类不允许将
null
用作键或值。”