浅谈Map集合中get不存在的key值,会抛出异常吗?

我就废话不多说了,大家还是直接看代码吧~

public static void main(String[] args)
{
 Map<String, String> a = new HashMap<String, String>();
 String string = a.get("a111");
 System.out.println(string);
}

在Map集合中,get一个不存在的值,不会抛出异常,获得的返回值为null。

补充知识:map中get不存在的key和containsKey方法

在Map集合中,get一个不存在的值,不会抛出异常,获得的返回值为null。

public static void main(String[] args)
{
 Map<String, String> a = new HashMap<String, String>();
 String string = a.get("a111");
 System.out.println(string);
}

Map集合允许值对象为null,并且没有个数限制,所以当get()方法的返回值为null时,可能有两种情况,一种是在集合中没有该键对象,另一种是该键对象没有映射任何值对象,即值对象为null。因此,在Map集合中不应该利用get()方法来判断是否存在某个键,而应该利用containsKey()方法来判断,例如下面的例子。

下面的代码首先创建一个由HashMap类实现的Map集合,并依次向Map集合中添加一个值对象为null和“马先生”的映射;然后分别通过get()和containsKey()方法执行这两个键对象;最后执行一个不存在的键对象。关键代码如下:

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));
 }
}

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

get()方法的返回结果:

------ null 马先生 null

containsKey()方法的返回结果:

------ true true false

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

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

以上这篇浅谈Map集合中get不存在的key值,会抛出异常吗?就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 详谈Map的key、value值的数据类型不能为基本类型的原因

    interface Map<K,V> Map源码 /** * Returns the hash code value for this map entry. The hash code * of a map entry <tt>e</tt> is defined to be: <pre> * (e.getKey()==null ? 0 : e.getKey().hashCode()) ^ * (e.getValue()==null ? 0 : e.getVa

  • JAVA异常处理捕获与抛出原理解析

    JAVA 异常 当代码运行出现错误导致程序终止运行或出现错误情况的状况,就是异常.异常不是指语法错误,即不属于编译错误,只有运行的程序才会有异常. 这个时候,JAVA 就提供了优秀的处理方法:异常处理 异常处理能让程序在异常发生时,按照异常处理设定的逻辑对异常进行处理,最大程度保证程序继续运行,并且显示并处理异常. JAVA 程序发生异常,就会用对应的异常类的对象来封装异常,JRE(Java Runtime Environment) 便会寻找对应的异常处理逻辑来处理该异常. 总的说来,异常处理机

  • Java8 Map中新增的方法使用总结

    前言 得益于 Java 8 的 default 方法特性,Java 8 对 Map 增加了不少实用的默认方法,像 getOrDefault, forEach, replace, replaceAll, putIfAbsent, remove(key, value), computeIfPresent, computeIfAbsent, compute 和merge 方法.另外与 Map 相关的 Map.Entry 也新加了多个版本的 comparingByKey 和 comparingByVal

  • JAVA抛出异常的三种形式详解

    一.系统自动抛出异常 当程序语句出现一些逻辑错误.主义错误或者类型转换错误时,系统会自动抛出异常 例一 public static void main(String[] args) { int a = 5; int b = 0; System.out.println( a / b); } 运行结果,系统会自动抛出ArithmeticException异常 Exception in thread "main" java.lang.ArithmeticException: / by zer

  • 浅谈Map集合中get不存在的key值,会抛出异常吗?

    我就废话不多说了,大家还是直接看代码吧~ public static void main(String[] args) { Map<String, String> a = new HashMap<String, String>(); String string = a.get("a111"); System.out.println(string); } 在Map集合中,get一个不存在的值,不会抛出异常,获得的返回值为null. 补充知识:map中get不存在的

  • 浅谈Vue Element中Select下拉框选取值的问题

    之前写了.一个原生的select的,因为展示效果原因,给删除掉了,忘记保存代码了,现在大家展示使用elementUI的下拉框封装一个组件,供咱们项目中经常调用,减少代码量. html: <el-select v-model="ite" placeholder="请选择" value-key="mateGroup"> <el-option style="width: auto" :disabled="

  • 浅谈在页面中获取到ModelAndView绑定的值方法

    springMVC中通过ModelAndView进行后台与页面的数据交互,那么如何在页面中获取ModelAndView绑定的值呢? 1.在JSP中通过EL表达式进行获取(比较常用) 后台: ModelAndView model = new ModelAndView(); model.addObject("name","Jims"); JSP:在JSP中直接使用${name }进行获取 姓名:${name } 2.通过JSP内置对象进行获取 后台: ModelAndV

  • 浅谈Go语言中的结构体struct & 接口Interface & 反射

    结构体struct struct 用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套: go中的struct类型理解为类,可以定义方法,和函数定义有些许区别: struct类型是值类型. struct定义 type User struct { Name string Age int32 mess string } var user User var user1 *User = &User{} var user2 *User = new(User) struct使用 下面示例中user1和

  • 浅谈java Collection中的排序问题

    这里讨论list.set.map的排序,包括按照map的value进行排序. 1)list排序 list排序可以直接采用Collections的sort方法,也可以使用Arrays的sort方法,归根结底Collections就是调用Arrays的sort方法. public static <T> void sort(List<T> list, Comparator<? super T> c) { Object[] a = list.toArray(); Arrays.

  • 浅谈Python 集合(set)类型的操作——并交差

    阅读目录 •介绍 •基本操作 •函数操作 介绍 python的set是一个无序不重复元素集,基本功能包括关系测试和消除重复元素. 集合对象还支持并.交.差.对称差等. sets 支持 x in set. len(set).和 for x in set.作为一个无序的集合,sets不记录元素位置或者插入点.因此,sets不支持 indexing, slicing, 或其它类序列(sequence-like)的操作. 基本操作 >>> x = set("jihite")

  • 浅谈在Java中JSON的多种使用方式

    1. 常用的JSON转换 JSONObject 转 JSON 字符串 JSONObject json = new JSONObject(); jsonObject.put("name", "test"); String str = JSONObject.toJSONString(json); JSON字符串转JSON String str = "{\"name\":\"test\"}"; JSONObjec

  • 浅谈在springboot中使用定时任务的方式

    springboot定时任务 在springboot环境下有多种方法,这里记录下使用过的其中两种:1.使用注解,2.通过实现接口的方式. 使用注解的方式虽然比较简单,但是如果项目需要用户对定时周期进行修改操作,只使用注解就比较难实现.所以可以使用实现接口的方式.通过对接口的实现,可以在项目运行时根据需要修改任务执行周期,只需要关闭原任务再开启新任务即可. 1.使用注解方式 ​ 首先需要在启动类下添加 @EnableScheduling 注解(@EnableAsync是开启异步的注解) packa

  • 浅谈Gin框架中bind的使用

    目录 概述 Binding接口 context.Bind cnotext.MustBindWith ShouldBindWith context.BindJSON context.ShouldBindJSON context.ShouldBindUri() context.ShouldBindUri() 运行结果 总结 概述 Gin框架中,有bind函数可以非常方便的将url的查询参数query parameter.http的Header,body中提交上来的数据格式,如form,json,xm

  • 浅谈Go1.18中的泛型编程

    目录 前言 以前的Go泛型 泛型是什么 Go的泛型 泛型函数 泛型类型 类型集合 和接口的差异 总结 前言 经过这几年的千呼万唤,简洁的Go语言终于在1.18版本迎来泛型编程.作为一门已经有了14年历史的强类型语言,很难相信它到现在才开始有一个正式的泛型. 以前的Go泛型 虽然直到1.18版本才加入泛型,但是在2014年便有相关的讨论要在Go中加入泛型设计.但是由于各种原因没有实现.而之后的接口(interface)的提出,让泛型进一步搁置.但是由于接口的缺陷,最终Go团队还是在1.18的版本中

随机推荐