java map contains_Map containsKey()与get()方法区别

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 21:04   7057   0

我们先来看一下,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

booleancontainsKey(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 map = new HashMap();

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()方法进行判断!

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP