前提是: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()方法执行这两个键对象;最后执行一个不存在的键对象。关键代码如下:

  1. <span style="font-size:18px;">import java.util.HashMap;
  2. import java.util.Map;
  3. public class TestMapKey {
  4. public static void main(String[] args) {
  5. Map<Integer, String> map = new HashMap<Integer, String>();
  6. map.put(220180, null);
  7. map.put(220181, "马先生");
  8. System.out.println("get()方法的返回结果:");
  9. System.out.print("------ " + map.get(220180));
  10. System.out.print("    " + map.get(220181));
  11. System.out.println("    " + map.get(220182));
  12. System.out.println("containsKey()方法的返回结果:");
  13. System.out.print("------ " + map.containsKey(220180));
  14. System.out.print("    " + map.containsKey(220181));
  15. System.out.println("    " + map.containsKey(220182));
  16. }
  17. }
  18. </span>

执行上面的代码,在控制台将输出如下信息:

get()方法的返回结果:

------ null    马先生    null
containsKey()方法的返回结果:
------ true    true    false

结论:Map集合中不应该利用get()方法来判断是否存在某个键,因为可能map的key值存在但value的值为null

今天被这个坑了,记录一下

附加注意:

  1. Map<String, Object> channelMap = new HashMap<String, Object>();
  2. channelMap.put("1", "online");
  3. Map<String, Object> map = new HashMap<String, Object>();
  4. map.put("vt", 1);
  5. if(channelMap.containsKey(map.get("vt"))) {
  6. System.out.print("success");
  7. } else {
  8. System.out.print("fail");
  9. }

输出为fail

感觉问题在于containsKey里面的值类型为Object,而channelMap的key类型是String,类型不能自动转换,所以就匹配失败。

代码改为

  1. Map<String, Object> channelMap = new HashMap<String, Object>();
  2. channelMap.put("1", "online");
  3. Map<String, Object> map = new HashMap<String, Object>();
  4. map.put("vt", 1);
  5. if(channelMap.containsKey(map.get("vt")+"")) {
  6. System.out.print("success");
  7. } else {
  8. System.out.print("fail");
  9. }

输出为success,结果正常

MAP的get与containskey的更多相关文章

  1. Java—集合框架 List和Set的contains()以及Map的containsKey()、containsValue()

    如何判断集合中是否存在某个元素——contains() 1.List的contains(obj)方法 实际上,List调用contains(Object obj)方法时,会遍历List中的每一个元素, ...

  2. IMap 对map的功能的强化

    为了解决表单提交获得数据的方便性,我们将map的功能进行加强,表单提交的数据会自动将页面数据放入PageData对象中,当从页面获取数据时 new的时候要传request.request.getPar ...

  3. Map 基础用法

    import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Set; p ...

  4. 集合框架四(Map)

    Map的主要实现类: --HashMap:Map的主要实现类(掌握) --LinkedHashMap:使用链表维护添加进Map中的顺序,遍历时按添加时的顺序遍历 --TreeMap:按照添加进Map中 ...

  5. Java学习---Map的学习

    1. Map 1.1. map中的方法 1.2. Map.Entry 对于集合来讲,就是把kye-value的数据保存在了Map.Entry的实例之后,再在Map集合中插入了一个Map.Entry的实 ...

  6. java基础——Map集合

    Map以键值对的形式存储数据,其中Map.entry,是Map的内部类,它用来描述Map中的键值对.Map是一个接口,HashMap是他的一个实现类 Map中有几个重要的方法: get(Object ...

  7. Java之Map接口(双列集合)

    Map集合概述 现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射.Java提供了专门的集合类用来存放这种对象关系的对 ...

  8. map集合中取出分类优先级最高的类别名称

    import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.Map ...

  9. java之Map和Collection

    java中保存对象的容器可分为两类: 1.Map.Map是以键值对的形式来保存一组对象,可以通过键来查找值. 2.Collection.用来保存独立对象的序列.Collection又可分为三种类型: ...

随机推荐

  1. 腾讯云负载均衡CLB

    负载均衡 使用场景: ①购买一个负载均衡LB实例 ②一级.二级域名都解析到VIP上 ③创建HTTP/HTTPS监听器 ④绑定云主机 在nginx中只需要配置好伪静态和相关设置就ok了

  2. a链接打开另外的新页面

    在a标签添加target = "_blank" 属性即可

  3. 【c学习-5】

    int main(){ //二维数组的应用 int i,j; int a[2][3]; for(i=0;i void myFunction(){ int a[3]; int i; int max; f ...

  4. lnamp高性能架构之apache和nginx的整合

    搭建过lamp博友和lnmp的博友们可能对这这两个单词并不陌生,对与apachen,nginx相比都源码或yum安装过,但知道apache的nginx的优点,apache处理动态页面很强,nginx处 ...

  5. 彻底搞定C指针--“函数名与函数指针”

    函数名与函数指针   一 通常的函数调用 一个通常的函数调用的例子: //自行包含头文件 void MyFun(int x); //此处的申明也可写成:void MyFun( int ); 点击打开链 ...

  6. 第三课:PHP 语法

    PHP 脚本在服务器上执行,然后向浏览器发送回纯 HTML 结果. 基础 PHP 语法 PHP 脚本可放置于文档中的任何位置. PHP 脚本以 <?php 开头,以 ?> 结尾: < ...

  7. BZOJ 1441: Min(裴蜀定理)

    BZOJ 1441:Min Description 给出n个数(A1...An)现求一组整数序列(X1...Xn)使得S=A1*X1+...An*Xn>0,且S的值最小 Input 第一行给出数 ...

  8. 5,MongoDB 之 "$" 的奇妙用法

    在MongoDB中有一个非常神奇的符号 "$" "$"  在 update 中 加上关键字 就 变成了 修改器 其实 "$" 字符 独立出现 ...

  9. 5,版本控制git --标签管理

    打标签 像其他版本控制系统(VCS)一样,Git 可以给历史中的某一个提交打上标签,以示重要. 比较有代表性的是人们会使用这个功能来标记发布结点(v1.0 等等). 在本节中,你将会学习如何列出已有的 ...

  10. 1- js vue.js

    1 js 2  Vue.js