我的关注 |
¥0.1 hashmap判断是否存在key时,使用get(key)==null判断还是containsKey?
0

hashmap判断是否存在key时是否可以直接判断if(get(key)==null)?
containsKey(key)这个方法是否必须?

佛法不二
修改
评论(0)
1个回答
2
采纳
  • java中hashmap(key,value)的key和value都可以是null
  • 我们看hashmap中get()和containskey()的方法:
    1. public V get(Object key) {
    2. Node<K,V> e;
    3. return (e = getNode(hash(key), key)) == null ? null : e.value;
    4. // e.value也可能是Null,所以get()方法返回null,我们不知道是 getNode()==null 还是e.value==null
    5. }
    6. public boolean containsKey(Object key) {
    7. return getNode(hash(key), key) != null;
    8. }
    9. // getNode()方法返回HashMap中存储的节点Node<k,V>,存的是键值对
    其中containsKey()使用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
    这两种情况处理相同,则可以直接使用下列代码
  1. T t = map.get(key);
  2. if(t==null){
  3. //key不存在,或者存的值是null
  4. }else{
  5. //key存在
  6. }

如果需要区分处理,则需要使用:

  1. if(map.containskey(key)){
  2. //key 存在
  3. }else{
  4. //不存在
  5. }
  6. T t = map.get(key);
  7. if(t==null){
  8. //存的值是null
  9. }
采纳答案
hong
修改
评论 (0)
撰写回答