好的,这是我不明白的一点。
如果您尝试使用该get()
方法检索一个对象并返回 null,则仍然有可能将该对象存储为与您提供给该方法null
的键关联的对象。get()
您可以通过将对象的键传递containsKey()
给 map 方法来确定是否是这种情况。true
如果键存储在地图中,则返回
因此,containsKey()
应该如何告诉我与提供的键关联的值是否为null
?如果您想检查,
这是参考。第 553 页
问问题
4564 次
4 回答
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
.
于 2012-06-04T19:38:27.190 回答
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"));
如您所见,我在地图中放入了两个值,其中一个为空。然后我向地图询问三个值:其中两个存在(一个为空),一个不存在。看看结果:
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
存在空值,因此,使用get()
您无法区分元素是不在地图中还是在地图中具有null
值。但是,使用containsKey()
你可以,因为它返回一个boolean
.
于 2012-06-04T19:48:00.803 回答
3
(get() == null && containsKey()) == value is null
于 2012-06-04T19:40:45.303 回答
1
containsKey 会告诉您密钥是否在哈希图中。考虑一个键存在空值的情况,以及您要查找的键根本不在哈希图中的另一种情况。
于 2012-06-04T19:38:58.250 回答