了解HashMap <K,V>

Fas*_*tib 5 java hashmap

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

Eng*_*uad 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"));
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

true
false
Run Code Online (Sandbox Code Playgroud)

get()返回null两种情况:

  • 地图中不存在该键.
  • 密钥确实存在,但关联的值是null.

你不知道get()哪个是真的.但是,containsKey()无论其关联值是否存在,都会告诉您密钥是否存在于地图中null.


los*_*gio 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"));
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我在地图中放入了两个值,其中之一为空。我向地图询问了三个值:其中两个存在(一个为空),一个不存在。看看结果:

m.get("key1")=value1
m.containsKey("key1")=true
m.get("key2")=null
m.containsKey("key2")=true
m.get("key3")=null
m.containsKey("key3")=false
Run Code Online (Sandbox Code Playgroud)

第二个和第三个是棘手的部分。key2存在空值,因此,使用get()您无法区分该元素是不在映射中还是在具有null值的映射中。但是,使用containsKey()你可以,因为它返回一个boolean.