Map containsKey()与get()方法区别

    我们先来看一下,Java API文档中,是如何描述这两个方法的。

———————————————————————————————————————————

 

 get

get(Object key)

    返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。

    更确切地讲,如果此映射包含满足 (key==null ? k==null : key.equals(k)) 的键 k 到值 v 的映射关系,则此方法返回 v;否则返回 null。(最多只能有一个这样的映射关系)。

    如果此映射允许 null 值,则返回 null 值并不一定 表示该映射不包含该键的映射关系;也可能该映射将该键显示地映射到 null。使用 containsKey 操作可区分这两种情况。

    参数
        key - 要返回其关联值的键 
    返回
        指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null 
    抛出
        ClassCastException - 如果该键对于此映射是不合适的类型(可选) 
        NullPointerException - 如果指定键为 null 并且此映射不允许 null 键(可选) 

 

——————————————————————————————————————————

 

 

 containsKey


boolean containsKey(Object key)

    如果此映射包含指定键的映射关系,则返回 true。更确切地讲,当且仅当此映射包含针对满足 (key==null ? k==null : key.equals(k)) 的键 k 的映射关系时,返回 true。(最多只能有一个这样的映射关系)。

    参数:
        key - 测试是否存在于此映射中的键 
    返回:
        如果此映射包含指定键的映射关系,则返回 true 
    抛出:
        ClassCastException - 如果该键对于此映射是不合适的类型(可选) 
        NullPointerException - 如果指定键为 null 并且此映射不允许 null 键(可选) 

 

——————————————————————————————————————————


    由于Map集合允许值对象为null,并且没有个数限制,所以当get()方法的返回值为null时,可能有两种情况:

    ①是在集合中没有该键对象,

    ②是该键对象没有映射任何值对象,即值对象为null。

    因此,结合Java API中所述,在Map集合中不应该利用get()方法来判断是否存在某个键,而应该利用containsKey()方法来判断,示例如下:

import java.util.HashMap;
import java.util.Map;

public class MapDemo1 {

	public static void main(String[] args) {
		  Map<Integer, String> map = new HashMap<Integer, String>();  
		  map.put(1, "A");
		  map.put(2, null);
		
		  System.out.println( map.get(1));  //A
	      System.out.println(map.get(2));   //null
	      System.out.println(map.get(3));   //null
	      System.out.println("==================================");
	      System.out.println( map.containsKey(1));    //true
	      System.out.println(map.containsKey(2));    //true
	      System.out.println(map.containsKey(3));    //false
	}

}

运行结果如下:

A
null
null
==================================
true
true
false

 

总结:

Map集合中不应该利用get()方法来判断是否存在某个键,因为map的key值不存在时,或者key存在,但value为null时,都是返回null!

对于Map集合的key值判断,应该利用containsKey()方法进行判断!

转载于:https://my.oschina.net/u/3421709/blog/1377379

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值