MAP的get与containskey
前提是:Map可以出现在k与v的映射中,v为null的情况, 所以containsKey出现更加必要。
map.get(key)是得到的key所对应的value值。
map.contains(key)是判断是否存在这个key,即判断是否存在指定的键名key。
Map集合允许值对象为null,并且没有个数限制,所以当get()方法的返回值为null时,可能有两种情况,一种是在集合中没有该键对象,另一种是该键对象没有映射任何值对象,即值对象为null。因此,在Map集合中不应该利用get()方法来判断是否存在某个键,而应该利用containsKey()方法来判断,例如下面的例子。
下面的代码首先创建一个由HashMap类实现的Map集合,并依次向Map集合中添加一个值对象为null和“马先生”的映射;然后分别通过get()和containsKey()方法执行这两个键对象;最后执行一个不存在的键对象。关键代码如下:
- <span style="font-size:18px;">import java.util.HashMap;
- import java.util.Map;
- public class TestMapKey {
- public static void main(String[] args) {
- Map<Integer, String> map = new HashMap<Integer, String>();
- map.put(220180, null);
- map.put(220181, "马先生");
- System.out.println("get()方法的返回结果:");
- System.out.print("------ " + map.get(220180));
- System.out.print(" " + map.get(220181));
- System.out.println(" " + map.get(220182));
- System.out.println("containsKey()方法的返回结果:");
- System.out.print("------ " + map.containsKey(220180));
- System.out.print(" " + map.containsKey(220181));
- System.out.println(" " + map.containsKey(220182));
- }
- }
- </span>
执行上面的代码,在控制台将输出如下信息:
get()方法的返回结果:
------ null 马先生 null
containsKey()方法的返回结果:
------ true true false
结论:Map集合中不应该利用get()方法来判断是否存在某个键,因为可能map的key值存在但value的值为null
今天被这个坑了,记录一下
附加注意:
- Map<String, Object> channelMap = new HashMap<String, Object>();
- channelMap.put("1", "online");
- Map<String, Object> map = new HashMap<String, Object>();
- map.put("vt", 1);
- if(channelMap.containsKey(map.get("vt"))) {
- System.out.print("success");
- } else {
- System.out.print("fail");
- }
输出为fail
感觉问题在于containsKey里面的值类型为Object,而channelMap的key类型是String,类型不能自动转换,所以就匹配失败。
代码改为
- Map<String, Object> channelMap = new HashMap<String, Object>();
- channelMap.put("1", "online");
- Map<String, Object> map = new HashMap<String, Object>();
- map.put("vt", 1);
- if(channelMap.containsKey(map.get("vt")+"")) {
- System.out.print("success");
- } else {
- System.out.print("fail");
- }
输出为success,结果正常
MAP的get与containskey的更多相关文章
- Java—集合框架 List和Set的contains()以及Map的containsKey()、containsValue()
如何判断集合中是否存在某个元素——contains() 1.List的contains(obj)方法 实际上,List调用contains(Object obj)方法时,会遍历List中的每一个元素, ...
- IMap 对map的功能的强化
为了解决表单提交获得数据的方便性,我们将map的功能进行加强,表单提交的数据会自动将页面数据放入PageData对象中,当从页面获取数据时 new的时候要传request.request.getPar ...
- Map 基础用法
import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Set; p ...
- 集合框架四(Map)
Map的主要实现类: --HashMap:Map的主要实现类(掌握) --LinkedHashMap:使用链表维护添加进Map中的顺序,遍历时按添加时的顺序遍历 --TreeMap:按照添加进Map中 ...
- Java学习---Map的学习
1. Map 1.1. map中的方法 1.2. Map.Entry 对于集合来讲,就是把kye-value的数据保存在了Map.Entry的实例之后,再在Map集合中插入了一个Map.Entry的实 ...
- java基础——Map集合
Map以键值对的形式存储数据,其中Map.entry,是Map的内部类,它用来描述Map中的键值对.Map是一个接口,HashMap是他的一个实现类 Map中有几个重要的方法: get(Object ...
- Java之Map接口(双列集合)
Map集合概述 现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射.Java提供了专门的集合类用来存放这种对象关系的对 ...
- map集合中取出分类优先级最高的类别名称
import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.Map ...
- java之Map和Collection
java中保存对象的容器可分为两类: 1.Map.Map是以键值对的形式来保存一组对象,可以通过键来查找值. 2.Collection.用来保存独立对象的序列.Collection又可分为三种类型: ...
随机推荐
- struts2之标签库
使用Struts2标签的准备工作: 导入Struts2标签库,该标签定义文件位于 struts2-core-2.3.16.3.jar 的 METE-INF下的struts-tag.tld文件. < ...
- Oracle_11g中解决被锁定的scott用户的方法
在安装完Oracle10g和创建完oracle数据库之后,想用数据库自带的用户scott登录,看看连接是否成功. 问题: 在cmd命令中,用“sqlplus scott/ tiger”登录时,老是提 ...
- java 二进制、位运算、和移位运算符(2013-07-30-bd 写的日志迁移
二进制是逢2进位的进位制,0.1是基本算符, 1字节=8位 比如 int a =1 ;int 占4个字节在计算机里表示为: java中的4个位运算,分别是“按位与&.按位或|.按位异或^,按位 ...
- JZOJ| 5910. DuLiu
Description LF是毒瘤出题人中AK IOI2019,不屑于参加NOI的唯一的人.他对人说话,总是满口垃圾题目者也,教人半懂不懂的.因为他姓李,别人便从QQ群上的“毒瘤李F ...
- DSP资源分享贴
DSP资源分享 [2017.5.16 更新] 分享资源共同学习.以前的资源很多人都说用不了了,我会陆续补充,逐步完善.这里不单单分享DSP的,设计基础的,还有其他的电子相关的比较好的资源吧主都和您分享 ...
- 交叉编译qt5.6
按照网上的攻略编译QT5.6 https://www.lijingquan.net/2016/07/08/build-kernel-busybox-qt5-6-tslib-imx28/ 出现问题,找不 ...
- C语言数组篇(五)多级指针和二维数组指针的区别
多级指针 以二级指针为例 二级指针的由来是 指针数组 的指针形式. int *p[10] 读取的顺序是 p[] --> 10个空间的数组 * p[] --> 这10个空间的数组里面存放 ...
- Git-Git分支
代码管理之殇 分支是代码管理的利器.如果没有有效的分支管理,代码管理就适应不了复杂的开发过程和项目的需要.在实际的项目实践中,单一分支的单线开发模式还远远不够,因为: 成功的软件项目大多要经过多个开发 ...
- AS3项目基础框架搭建分享robotlegs2 + starling1.3 + feathers1.1
这个框架和我之前使用robotlegs1版本的大体相同,今天要写一个新的聊天软件就把之前的框架升级到了2.0并且把代码整理了一下. 使用适配器模式使得starling的DisplayObject和fl ...
- Pascal 杨辉三角
用于打印杨辉三角的程序,有多种算法仅提供一种 PRogram yh (input,ouput);var m,n,c:integer;Begin For m:=0 TO 10 Do Begin ...