在Java里集合框架的整体结构是怎样的_Java集合体系层级说明
发布时间 - 2026-01-27 00:00:00 点击率:次Java集合框架由Collection和Map两条平行主线构成,前者含List、Set、Queue三大分支,后者自成键值对体系;二者无继承关系,仅通过视图桥接。
Java集合框架不是一棵树,而是一张有向接口网——Collection 和 Map 是两条平行主线,彼此不继承,也不实现对方。
Collection 接口下三大分支:List、Set、Queue
Collection 是单列集合的根接口,但它**不能被直接实例化**,所有具体实现都落在它的子接口上:
-
List:有序、可重复,关注「位置」——ArrayList(数组实现,随机访问快)、LinkedList(链表实现,增删快)、Vector(线程安全但已基本弃用) -
Set:无序、不可重复,关注「唯一性」——HashSet(哈希表,依赖hashCode()和equals())、TreeSet(红黑树,要求元素可比较或传入Comparator)、LinkedHashSet(哈希+链表,保持插入顺序) -
Queue:专为队列操作设计,支持 FIFO 或优先级——LinkedList(同时实现了Queue)、PriorityQueue(堆实现,非线程安全)、ArrayDeque(双端队列,比Stack更推荐)
注意:Stack 虽然继承自 Vector,但它属于遗留类,Deque 及其实现(如 ArrayDeque)才是现代替代方案。
Map 不是 Collection 的子接口,它自成体系
Map 是键值对映射的顶层接口,和 Collection 完全无关。它没有继承关系,只有实现类提供「视图」(View)来

map.keySet() 返回一个 Set,map.values() 返回一个 Collection,但这些视图只是代理,修改它们会反映到原 Map 上。
-
HashMap:最常用,非线程安全,允许一个null键和多个null值 -
TreeMap:按键排序,基于红黑树,要求键实现Comparable或传入Comparator -
LinkedHashMap:按插入/访问顺序维护条目,适合 LRU 缓存场景 -
ConcurrentHashMap:高并发场景首选,分段锁(JDK 7)或 CAS + synchronized(JDK 8+),不接受null键值 -
Hashtable:老式线程安全实现,方法全加synchronized,性能差,且不允许null键值——已被ConcurrentHashMap取代
迭代器与增强 for 循环背后的统一机制
所有 Collection 实现类都必须提供 iterator() 方法,返回一个 Iterator 实例;Map 则通过 keySet()、values()、entrySet() 获取可迭代视图。
增强 for 循环本质就是语法糖,编译后转为 Iterator 调用:
for (String s : list) { ... }
// 等价于
Iterator it = list.iterator();
while (it.hasNext()) {
String s = it.next();
...
}
所以任何类只要实现 Iterable 接口(即提供 iterator() 方法),就能用增强 for 遍历——这解释了为什么 Map 本身不能直接遍历,但它的三个视图可以。
容易忽略的兼容性与行为细节
不同实现对 null 的容忍度差异极大,这是运行时 NullPointerException 的高频来源:
-
ArrayList、LinkedList、HashSet、HashMap允许null元素或键值 -
TreeSet、TreeMap在遇到null键时抛NullPointerException(因为比较逻辑无法处理null) -
ConcurrentHashMap和Hashtable明确禁止null键和值,否则在put()时就抛异常 -
Arrays.asList()返回的是固定大小的List,底层是数组包装,调用add()或remove()会抛UnsupportedOperationException
真正写业务代码时,别只看接口名,得盯住具体实现类的行为边界——尤其是 null 处理、线程安全性、是否支持修改操作,这些才是线上出问题的地方。
# java
# 键值对
# java集合框架
# 为什么
# NULL
# for
# 循环
# 继承
# 接口
# 堆
# Collection
# 线程
# map
# 并发
# 键值
# 才是
# 遍历
# 三大
# 两条
# 但它
# 的是
# 红黑
# 这是
# 桥接
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何与Docker(Sail)协同开发?(环境搭建教程)
Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】
Python3.6正式版新特性预览
如何撰写建站申请书?关键要点有哪些?
无锡营销型网站制作公司,无锡网选车牌流程?
网站制作免费,什么网站能看正片电影?
LinuxCD持续部署教程_自动发布与回滚机制
Laravel怎么连接多个数据库_Laravel多数据库连接配置
如何在阿里云虚拟主机上快速搭建个人网站?
如何在IIS中新建站点并配置端口与IP地址?
香港服务器网站卡顿?如何解决网络延迟与负载问题?
如何用景安虚拟主机手机版绑定域名建站?
如何在 Pandas 中基于一列条件计算另一列的分组均值
Laravel路由怎么定义_Laravel核心路由系统完全入门指南
Laravel如何自定义分页视图?(Pagination示例)
Laravel怎么上传文件_Laravel图片上传及存储配置
如何快速搭建虚拟主机网站?新手必看指南
如何用搬瓦工VPS快速搭建个人网站?
音响网站制作视频教程,隆霸音响官方网站?
jQuery中的100个技巧汇总
javascript日期怎么处理_如何格式化输出
如何将凡科建站内容保存为本地文件?
PHP 500报错的快速解决方法
javascript如何操作浏览器历史记录_怎样实现无刷新导航
JavaScript如何操作视频_媒体API怎么控制播放
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集
网站建设要注意的标准 促进网站用户好感度!
Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程
Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧
北京的网站制作公司有哪些,哪个视频网站最好?
Python文件流缓冲机制_IO性能解析【教程】
1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤
高防服务器如何保障网站安全无虞?
Laravel怎么发送邮件_Laravel Mail类SMTP配置教程
微信小程序 闭包写法详细介绍
EditPlus中的正则表达式 实战(4)
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】
如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】
INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】
Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势
laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析
制作公司内部网站有哪些,内网如何建网站?
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中
PythonWeb开发入门教程_Flask快速构建Web应用
如何在宝塔面板中修改默认建站目录?
高端建站三要素:定制模板、企业官网与响应式设计优化
潮流网站制作头像软件下载,适合母子的网名有哪些?

