了解HashMap <k,v> </k,v>

时间:2012-06-04 19:36:21

标签: java hashmap

好的,这是我不明白的一点 如果您尝试使用get()方法检索对象并返回null,则仍可能将null存储为与您提供给{{1}的密钥关联的对象}} 方法。您可以通过将对象的键传递给映射的get()方法来确定是否是这种情况。如果密钥存储在地图中,则返回containsKey() 那么,true应该如何告诉我与提供的密钥相关的值是containsKey() ? 如果您想检查,这是the reference。 Page 553

4 个答案:

答案 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中根本不存在。