Map判空 、空字符串、空key值等各种判断方法,你都掌握了吗?

👉 这是一个或许对你有用的社群

🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料: 

c3b553975bea758aeefe46a851d1660e.gif

👉这是一个或许对你有用的开源项目

国产 Star 破 10w+ 的开源项目,前端包括管理后台 + 微信小程序,后端支持单体和微服务架构。

功能涵盖 RBAC 权限、SaaS 多租户、数据权限、商城、支付、工作流、大屏报表、微信公众号等等功能:

  • Boot 地址:https://gitee.com/zhijiantianya/ruoyi-vue-pro

  • Cloud 地址:https://gitee.com/zhijiantianya/yudao-cloud

  • 视频教程:https://doc.iocoder.cn

来源:blog.csdn.net/goGoing_/
article/details/102532715


Map是一种无序的基于key-value的数据结构。对于开发人员来说,除了JSON以外,这种存储的方式最熟悉不过了。

经常在研发的过程中,高频用到Map的数据结构。在业务逻辑层处理中,往往会有一些对Map数据类型进行一些判空的处理,自己总结了一下,将判断方法写出供大家参考:

一、Map本身的判空

1.1“==null”不能判断Map的本身是否为null

首先看我的demo

7dec1776b8058a5ca2a48649261a1c74.png

初入java的时候可能会有疑问,map还没有向里面添加任何值,为什么==null不成立?其实很简单,面向对象的基础中曾有说明,当new的时候,将创造了一个新的对象或者说是一个新的实例,没有new之前,是没有它的内部方法的,只有new了以后,这些东西和方法在内存中才会真的存在,及指向了一个具体地址。

如上图,我们在new的时候 调用了HashMap的无参构造方法,从源码层面看,该方法为当前对象开辟了默认的内存大小空间。

因此,得到的结果就是,当new了以后,该对象指向的是一个地址而不是一个null’值,所以在此时用“==null”并不能成立,什么情况下可以利用“==null”?如下图所示:

48f1dabcc998f2a365f714a7f99e0484.png

当它就是个空值得时候就可以利用“==null"来判断,这里的等于null 换在代码里,右边的表达式可以是一个放回了null值的方法。为当前map赋值了null,项目中就可以判断,当map没有new得时候或者是为其复制了null的时候。就可以利用=null来判断。

1.2map.isEmpty()判断为空

当map没有向里面put数据的时候,可以利用map自带得方法来进行判断该Map是否里面有值,如下图得Demo:

efc9da8a5143687b8cc29598223bfb3f.png

由此可见,map.isEmpty()当没有进行put方法操作得时候,.isEmpty()可以判断该Map里面是否有键值对存在。

1.3“==null”与“isEmpty()”最大的区别

如果map是一个null存在,那么在利用isEmpty()来判空将报错空指针异常NullponiterException。如下图

631622270aceed0223adcd118f195e35.png

此外,还要注意一种情况:

265234efa6db0cc150d9985406739176.png

如果该map里面会有这种情况的话,那么这两种判空方法将不能够实现业务处理。也就诞生了map的另一种判断方法,下面会详解。

2.1 map.containsKey(Object key)判断map中是否存在此键值对

779a6f6df03920a879993377d45d4926.png

map.containsKey(Object key)方法可以判断出这个map中是否包含了某一个键值对,返回值为Boolean类型,在括号中填写想要查找的key值,若包含则为true,否则为false

2.2 对map中key值对应的value进行判断

fc622abced9ccfd55010064b7387ce7f.png

2.3对map中key对应的value为空字符串时候的判断。

在这里会涉及到泛型的问题,如若value的值的泛型为String类型的则直接可以利用下面的方法:

eca1f636198fc77b655e86e19fd52d37.png

可以取出想判断的value的key值.isEmpty()来判断。当然,如果泛型不是String类型的是否则可以利用如下的办法来解决:

d436a140cf1aa48c90baee2d15ea2fd8.png

.equeals()的方法可以很好的来判断这个map中的key对应的value是否为空。

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro

  • 视频教程:https://doc.iocoder.cn/video/

二、总结

一般来说,对于数据类型的判空应该将空值和空字符串的问题都要判断上,逻辑层处理的时候很重要,如果没有进行严格的空值,对后面的业务处理会造成很麻烦,因为java的运行方式是一行一行的来读取,只要一个if条件进去以后会执行一连串的方法,所以数据判断是很重要的一个前提,直接影响到后续的程序执行。欢迎伙伴们来给我提出宝贵的意见和思路,一起共同进步。


欢迎加入我的知识星球,全面提升技术能力。

加入方式,长按下方二维码噢

7558c4130f8e698f5b0748cf77a07375.jpeg

星球的内容包括:项目实战、面试招聘、源码解析、学习路线。

51440e52103839699a0c2f2e32369d82.png

d3372e9dfcd5741f66dffcbfae746649.png3fc39ce9a00015cd6b0563c6575c5bab.pngd87e7e5d21a3193dc0e49ccca70878d5.png58412327a36a7f4e7c2f698a44cf43fa.png

文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值