5

好的,这是我不明白的一点。
如果您尝试使用该get()方法检索一个对象并返回 null,则仍然有可能将该对象存储为与您提供给该方法null的键关联的对象。get()您可以通过将对象的键传递containsKey()给 map 方法来确定是否是这种情况。true如果键存储在地图中,则返回
因此,containsKey()应该如何告诉我与提供的键关联的值是否为null?如果您想检查,
这是参考。第 553 页

4

4 回答 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 回答