Java 集合判空方法对比

Java 集合判空方法对比

问题背景

在抽奖设计需要更新活动关联的用户状态的操作时,由于一个活动奖品可以关联到许多用户,故用户采用列表的形式进行存放:

对活动用户查表并进行防御性编程时,对用户列表进行判空判定发现了一个问题:我选择判空的方法为list.isEmpty(),与标准项目中写的CollectionUtils.isEmpty(lists)(通常指 Hutool、Spring 或 Apache Commons 提供的工具类)写法有区别:一个是使用的封装好的工具类,一个是自带的方法。++这两个有什么本质区别?++

知识收获

经了解,核心区别在于对 null 值的处理机制

  • ArrayList 为例,其实现非常直接:

    java 复制代码
    public boolean isEmpty() {
        return size == 0;
    }

    它仅判断集合内是否包含元素(即 size == 0 ),如果list为 **null** ,会直接抛出空指针异常(NPE),如果接受的列表中没有进行非空的检验直接调用容易崩溃。 故调用此方法前,必须确保列表引用不为null,否则建议使用CollectionUtils工具类,它对空指针的判定在业务逻辑上进行了归并,不存在抛出空指针异常的风险。

  • 以常见的工具类实现为例,其逻辑通常如下:

    java 复制代码
    public static boolean isEmpty(Collection<?> collection) {
        return collection == null || collection.isEmpty();
    }

    它判断集合是否为 null 或者 是否不包含元素(即size),内部集成了 null 检查,安全性更高。且使用代码更加简洁,减少显式的 list != null 的判断。

简单总结图

相关推荐
Dillon Dong2 小时前
【风电控制】TI TMS320F28379D 双CPU架构解析与任务分布设计
嵌入式硬件·算法·变流器·风电控制
ps酷教程7 小时前
Jackson 解决没有无参构造函数的反序列化问题
java
NiceCloud喜云7 小时前
Opus 4.8 的 Effort Control 怎么选:Low 到 Max 五档策略
android·java·大数据·前端·c++·python·spring
小羊在睡觉7 小时前
力扣84. 柱状图中最大的矩形
后端·算法·leetcode·golang·go
3DVisionary8 小时前
蓝光三维扫描:医疗制造的精度焦虑怎么解
人工智能·算法·制造·蓝光三维扫描·医疗制造·三维检测·义齿检测
好评笔记8 小时前
机器学习面试八股——常用损失函数
人工智能·深度学习·算法·机器学习·校招
weixin_468466858 小时前
全局与局部注意力机制新手实战指南
人工智能·python·深度学习·算法·自然语言处理·transformer·注意力机制
_日拱一卒8 小时前
LeetCode:994腐烂的橘子
java·数据结构·算法·leetcode·深度优先
隔窗听雨眠8 小时前
Nginx网关响应慢排查手记
java·服务器·nginx
珂朵莉MM9 小时前
第七届全球校园人工智能算法精英大赛-算法巅峰赛产业命题赛第3赛季优化题--束搜索
人工智能·算法