0

0

在Java中如何判断集合是否为空_Java集合空值检查解析

P粉602998670

P粉602998670

发布时间:2026-03-02 12:48:55

|

832人浏览过

|

来源于php中文网

原创

用 isempty() 判断集合是否为空最安全,但需先确保集合非 null;推荐 objects.nonnull(list) && !list.isempty(),避免 npe;size() == 0 语义不清且可能触发懒加载。

在java中如何判断集合是否为空_java集合空值检查解析

isEmpty() 判断集合是否为空最安全

Java 集合类(ArrayListHashMapHashSet 等)都继承自 Collection 或实现 Map 接口,它们各自提供了标准的空值检查方法:isEmpty()。这个方法语义明确、性能好,且不会因集合为 null 而抛异常——前提是**你已经确保集合对象不为 null**。

常见错误是直接调用 list.isEmpty() 却没做 null 检查,一旦 list == null,就会触发 NullPointerException

  • ✅ 正确写法(先判空再调用):
    if (list != null && !list.isEmpty()) { ... }
  • ✅ 更简洁(用 Objects.nonNull()):
    if (Objects.nonNull(list) && !list.isEmpty()) { ... }
  • ❌ 错误写法:
    if (list.isEmpty()) { ... } // list 为 null 时直接崩

为什么不用 size() == 0

size()isEmpty() 在绝大多数 JDK 实现中性能几乎无差别(例如 ArrayListisEmpty() 就是 size() == 0),但语义上 isEmpty() 更清晰、意图更直接。更重要的是:部分集合(如某些懒加载或代理集合)可能重写了 isEmpty() 做短路优化,而 size() 可能触发实际计算或遍历。

志设AI
志设AI

志设AI是一站式AI设计平台,集“AI生图 + 在线设计 + 素材交易 + 收益分成”于一体。

下载
  • LinkedListArrayListHashMap 来说,两者等价,可互换
  • 对 Guava 的 ImmutableList 或某些 ORM 返回的懒集合(如 Hibernate 的 PersistentBag),isEmpty() 可能不加载数据,size() 却会强制初始化
  • 永远别写 list.size() > 0 替代非空判断——多一次整数比较,且可读性差

Map 类型要用 isEmpty(),不是 keySet().isEmpty()

Map 接口也定义了 isEmpty() 方法,它直接检查内部条目数,比先取 keySet() 再判空高效且安全。尤其当 mapnull 或是空 ConcurrentHashMap 时,keySet() 可能返回不可变视图或触发额外逻辑。

立即学习Java免费学习笔记(深入)”;

  • ✅ 推荐:
    if (map != null && !map.isEmpty()) { ... }
  • ❌ 不必要且低效:
    if (map != null && map.keySet() != null && !map.keySet().isEmpty()) { ... }
  • 注意:map.keySet() 永远不会返回 null(JDK 规范保证),所以上面的 map.keySet() != null 是冗余的

工具类能简化,但别盲目依赖

Apache Commons Collections 的 CollectionUtils.isEmpty() 和 Guava 的 Iterables.isEmpty() 确实能自动处理 null,比如 CollectionUtils.isEmpty(list)null 返回 true。但要注意:它们的“空”语义可能和业务需求冲突——比如你希望 null 视为非法输入并显式报错,而不是静默当作空集合处理。

  • CollectionUtils.isEmpty() 前确认团队规范允许隐式 null 容忍
  • Iterables.isEmpty(null) 返回 true,但 Iterables.isEmpty(ImmutableList.of()) 也返回 true,二者无法区分
  • 如果项目没引入这些库,硬加一个只为省两行判空,得不偿失
空检查本身很简单,难的是统一处理 null 场景、匹配真实业务语义,以及在性能敏感路径避开意外加载。别让“一行代码”掩盖了对数据生命周期的理解。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
hibernate和mybatis有哪些区别
hibernate和mybatis有哪些区别

hibernate和mybatis的区别:1、实现方式;2、性能;3、对象管理的对比;4、缓存机制。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

154

2024.02.23

Hibernate框架介绍
Hibernate框架介绍

本专题整合了hibernate框架相关内容,阅读专题下面的文章了解更多详细内容。

91

2025.08.06

Java Hibernate框架
Java Hibernate框架

本专题聚焦 Java 主流 ORM 框架 Hibernate 的学习与应用,系统讲解对象关系映射、实体类与表映射、HQL 查询、事务管理、缓存机制与性能优化。通过电商平台、企业管理系统和博客项目等实战案例,帮助学员掌握 Hibernate 在持久层开发中的核心技能。

39

2025.09.02

Hibernate框架搭建
Hibernate框架搭建

本专题整合了Hibernate框架用法,阅读专题下面的文章了解更多详细内容。

71

2025.10.14

guava包作用
guava包作用

guava是一个java库,增强了java标准库,提供更有效率和易于使用的集合、实用程序、缓存和并发工具。想了解更多guava的相关内容,可以阅读本专题下面的文章。

270

2024.05.29

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

249

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

967

2024.03.01

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1728

2023.10.19

Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

43

2026.02.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 4万人学习

C# 教程
C# 教程

共94课时 | 10.5万人学习

Java 教程
Java 教程

共578课时 | 74.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号