在Java中集合是否允许存null_Java不同集合支持情况解析
发布时间 - 2025-12-30 00:00:00 点击率:次ArrayList和LinkedList可存null;HashMap允一个null键和多个null值,Hashtable完全禁止;HashSet和LinkedHashSet允许null,TreeSet无参构造时禁止null,自定义Comparator可支持;ConcurrentHashMap禁止null键值,CopyOnWriteArrayList允许null。
ArrayList 和 LinkedList 能否存 null
可以,ArrayList 和 LinkedList 都允许任意数量的 null 元素。它们底层基于数组或链表实现,不校验元素是否为 null。
常见错误现象:调用 get() 返回 null 后直接链式调用方法(如 list.get(i).toString()),触发 NullPointerException —— 这不是集合本身的问题,而是业务逻辑未判空。
-
add(null)正常执行,不会抛异常 -
contains(null)返回true(如果确实添加过) -
indexOf(null)返回第一个null的下标
HashMap 和 Hashtable 对 null 的处理差异
HashMap 允许一个 null 键和任意多个 null 值;Hashtable 则完全禁止 null 键和 null 值,否则立即抛 NullPointerException。
原因在于 Hashtable 是遗留类,设计时强调线程安全与严格校验;HashMap 更注重灵活性与性能,把判空责任交给使用者。
-
new HashMap().put(null, "a")✅ 成功 -
new Hashtable().put(null, "a")❌ 抛NullPointerException -
new HashMap().put("k", null)✅ 成功 -
new Hashtable().put("k", null)❌ 同样抛异常
HashSet、TreeSet、LinkedHashSet 的 null 支持边界
HashSet 和 LinkedHashSet 允许存 null(因为底层是 HashMap,null 作为 key 存入);TreeSet 是否允许取决于其构造方式:
- 无参构
造:使用自然排序,add(null)直接抛NullPointerException(因为null.compareTo(...)不合法) - 传入自定义
Comparator:若该比较器能安全处理null(例如用Comparator.nullsFirst()),则可存null
注意:TreeSet 中即使允许 null,也只能有一个 —— 因为它按“相等”逻辑去重,而 null 与 null 视为重复。
ConcurrentHashMap 和 CopyOnWriteArrayList 的 null 约束
ConcurrentHashMap 明确禁止 null 键和 null 值,否则在 put() 时就抛 NullPointerException;CopyOnWriteArrayList 允许 null,行为同 ArrayList。
这是并发容器的主动防御设计:ConcurrentHashMap 内部大量依赖 key.hashCode() 和 key.equals(),而 null 会导致这些调用失败或语义模糊,所以从源头拦截。
-
new ConcurrentHashMap().put(null, "v")❌ 立即报错 -
new CopyOnWriteArrayList().add(null)✅ 允许 -
Collections.synchronizedSet(new HashSet())允许null(同步包装不改变底层行为)
Map实际编码中,最容易被忽略的是map = new ConcurrentHashMap<>(); // 下面这行会抛 NullPointerException,不是运行时偶然,而是设计强制 map.put(null, "value"); // java.lang.NullPointerException
TreeSet 的自然排序场景下对 null 的静默拒绝,以及 ConcurrentHashMap 对 null 的零容忍 —— 它们不像 HashMap 那样“宽容”,出错位置也更靠前。
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
高防服务器:AI智能防御DDoS攻击与数据安全保障
Claude怎样写约束型提示词_Claude约束提示词写法【教程】
如何在 Pandas 中基于一列条件计算另一列的分组均值
Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】
PythonWeb开发入门教程_Flask快速构建Web应用
Laravel如何生成API文档?(Swagger/OpenAPI教程)
香港服务器租用费用高吗?如何避免常见误区?
laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法
Laravel PHP版本要求一览_Laravel各版本环境要求对照
如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)
Laravel怎么在Blade中安全地输出原始HTML内容
JS去除重复并统计数量的实现方法
如何快速搭建高效WAP手机网站吸引移动用户?
nginx修改上传文件大小限制的方法
网站制作大概多少钱一个,做一个平台网站大概多少钱?
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
Laravel API资源类怎么用_Laravel API Resource数据转换
Laravel中的Facade(门面)到底是什么原理
Linux网络带宽限制_tc配置实践解析【教程】
Laravel如何配置任务调度?(Cron Job示例)
网站制作壁纸教程视频,电脑壁纸网站?
如何快速上传自定义模板至建站之星?
Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】
如何用西部建站助手快速创建专业网站?
如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】
如何批量查询域名的建站时间记录?
Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】
php在windows下怎么调试_phpwindows环境调试操作说明【操作】
如何在万网主机上快速搭建网站?
Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比
Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件
Laravel怎么使用artisan命令缓存配置和视图
Laravel事件监听器怎么写_Laravel Event和Listener使用教程
宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法
青岛网站建设如何选择本地服务器?
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
Linux系统运维自动化项目教程_Ansible批量管理实战
深圳网站制作培训,深圳哪些招聘网站比较好?
如何自定义建站之星模板颜色并下载新样式?
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
Android GridView 滑动条设置一直显示状态(推荐)
DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
如何打造高效商业网站?建站目的决定转化率
利用JavaScript实现拖拽改变元素大小
JavaScript如何实现音频处理_Web Audio API如何工作?
米侠浏览器网页背景异常怎么办 米侠显示修复


造:使用自然排序,