文档章节

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

Typing_Orange
 Typing_Orange
发布于 2017/07/14 13:45
字数 670
阅读 87
收藏 0

    我们先来看一下,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()方法进行判断!

© 著作权归作者所有

Typing_Orange
粉丝 15
博文 47
码字总数 30624
作品 0
南京
私信 提问
HashMap和HashTable的区别

1、 继承和实现区别   Hashtable是基于陈旧的Dictionary类,完成了Map接口;HashMap是Java 1.2引进的Map接口的一个实现(HashMap继承于AbstractMap,AbstractMap完成了Map接口)。   2、 ...

飓风2000
2014/05/21
1K
1
SynchronizedMap和ConcurrentHashMap 区别

SynchronizedMap和ConcurrentHashMap的深入分析 在开始之前,先介绍下Map是什么? javadoc中对Map的解释如下: An objectthat maps keys to values . Amap cannot contain duplicatekeys; e......

onedotdot
2017/10/31
11
0
Map.containsKey方法——判断Map集合对象中是否包含指定的键名

containsKey方法用来判断Map集合对象中是否包含指定的键名。 语法 boolean containsKey(Object key) 返回值:如果Map集合中包含指定的键名,则返回true;否则返回false。 参数:key是要查询的...

故久呵呵
2018/07/14
47
0
HashMap和Hashtable的区别

HashMap和Hashtable的区别 1、Hashtable是基于陈旧的Dictionary类,完成了Map接口;HashMap是Java1.2引进的map的基于散列表的实现,取代了HashTable(HashMap继承AbstractMap完成Map接口);...

SibylY
2013/07/21
285
4
hashmap实现原理浅析

看了下JAVA里面有HashMap、Hashtable、HashSet三种hash集合的实现源码,这里总结下,理解错误的地方还望指正 HashMap和Hashtable的区别 HashSet和HashMap、Hashtable的区别 HashMap和Hashtab...

商者
2016/03/30
71
0

没有更多内容

加载失败,请刷新页面

加载更多

c++ 虚基类

c++ 虚基类 p556

天王盖地虎626
17分钟前
12
0
Java中的面向对象

一、面向对象 面向对象和面向过程的区别 过程就是函数,就是写方法,就是方法的一种实现。 对象就是将函数,属性的一种封装。用人们思考习惯的方式思考问题。 如何自定义类 修饰符 类名{ //成...

zhiruochujian
25分钟前
3
0
k8s删除Terminating状态的命名空间

背景: 我们都知道在k8s中namespace有两种常见的状态,即Active和Terminating状态,其中后者一般会比较少见,只有当对应的命名空间下还存在运行的资源,但是该命名空间被删除时才会出现所谓的...

Andy-xu
28分钟前
20
0
seata源码阅读笔记

seata源码阅读笔记 本文没有seata的使用方法,怎么使用seata可以参考官方示例,详细的很。 本文基于v0.8.0版本,本文没贴代码。 seata中的三个重要部分: TC:事务协调器,维护全局事务和分支...

东都大狼狗
41分钟前
7
0
Rust:最小化窗口后 CPU占用率高 (winit,glutin,imgui-rust)

最近试着用 imgui-rust 绘制界面,发现窗口最小化后CPU占用会增大。 查询的资料如下: https://github.com/rust-windowing/winit/issues/783 https://github.com/ocornut/imgui/issues/1151 ...

reter
45分钟前
21
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部