¥0.1
hashmap判断是否存在key时,使用get(key)==null判断还是containsKey?
1个回答
3
采纳
- java中hashmap(key,value)的key和value都可以是null
- 我们看hashmap中get()和containskey()的方法:
其中containsKey()使用public V get(Object key) {
Node<K,V> e;
return (e = getNode(hash(key), key)) == null ? null : e.value;
// e.value也可能是Null,所以get()方法返回null,我们不知道是 getNode()==null 还是e.value==null
}
public boolean containsKey(Object key) {
return getNode(hash(key), key) != null;
}
// getNode()方法返回HashMap中存储的节点Node<k,V>,存的是键值对
getNode()
方法来判断是否存在key; 而get方法也用了getNode()
方法做判断,如果不存在则返回null,如果存在返回e.value即key对应的值。
由于存储时,hashmap时容许put(key,value)中的value=null的,所以:使用containskey()返回null,代表key不存在。如果get()方法返回null时,存在两种可能:1是key不存在,2是key存在但是存的值是null。
结论
如果对
- key不存在
- key存在,但是存的值value是null
这两种情况处理相同,则可以直接使用下列代码
T t = map.get(key);
if(t==null){
//key不存在,或者存的值是null
}else{
//key存在
}
如果需要区分处理,则需要使用:
if(map.containskey(key)){
//key 存在
}else{
//不存在
}
T t = map.get(key);
if(t==null){
//存的值是null
}
撰写回答