好的,这是我不明白的一点
如果您尝试使用get()
方法检索对象并返回null,则仍可能将null
存储为与您提供给{{1}的密钥关联的对象}} 方法。您可以通过将对象的键传递给映射的get()
方法来确定是否是这种情况。如果密钥存储在地图中,则返回containsKey()
那么,true
应该如何告诉我与提供的密钥相关的值是containsKey()
?
如果您想检查,这是the reference。 Page 553
答案 0 :(得分:9)
Map<String, Object> map = new HashMap<String, Object>();
map.put("Foo", null);
System.out.println(map.containsKey("Foo"));
System.out.println(map.containsKey("Boo"));
<强>输出:强>
true
false
get()
在两种情况下返回null
:
null
。你无法从get()
判断出哪些是真的。但是,containsKey()
会告诉您密钥是否存在于地图中,无论其关联值是否为null
。
答案 1 :(得分:4)
考虑这段简单的代码:
Map<String, String> m = new HashMap<String, String>();
m.put("key1", "value1");
m.put("key2", null);
System.out.println("m.get(\"key1\")=" + m.get("key1"));
System.out.println("m.containsKey(\"key1\")=" + m.containsKey("key1"));
System.out.println("m.get(\"key2\")=" + m.get("key2"));
System.out.println("m.containsKey(\"key2\")=" + m.containsKey("key2"));
System.out.println("m.get(\"key3\")=" + m.get("key3"));
System.out.println("m.containsKey(\"key3\")=" + m.containsKey("key3"));
正如您所看到的,我在地图中放入了两个值,其中一个值为null。 Thene我向地图询问了三个值:其中两个存在(一个为空),一个不存在。看看结果:
m.get("key1")=value1
m.containsKey("key1")=true
m.get("key2")=null
m.containsKey("key2")=true
m.get("key3")=null
m.containsKey("key3")=false
第二个和第三个是棘手的部分。 key2
以null值存在,因此,使用get()
无法区分元素是否在地图中或是否在null
值的地图中。但是,使用containsKey()
可以,因为它返回boolean
。
答案 2 :(得分:3)
(get() == null && containsKey()) == value is null
答案 3 :(得分:1)
containsKey会告诉你密钥是否在hashmap中。考虑一个键存在空值的情况和另一种情况,其中您要查找的键在hashmap中根本不存在。