您的位置:首页 > 大数据 > 人工智能

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

2017-07-14 00:00 218 查看
我们先来看一下,Java API文档中,是如何描述这两个方法的。

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

get

V 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()方法进行判断!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: