在Java里集合框架的整体结构是怎样的_Java集合体系层级说明

发布时间 - 2026-01-27 00:00:00    点击率:
Java集合框架由Collection和Map两条平行主线构成,前者含List、Set、Queue三大分支,后者自成键值对体系;二者无继承关系,仅通过视图桥接。

Java集合框架不是一棵树,而是一张有向接口网——CollectionMap 是两条平行主线,彼此不继承,也不实现对方。

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() 返回一个 Setmap.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 的高频来源:

  • ArrayListLinkedListHashSetHashMap 允许 null 元素或键值
  • TreeSetTreeMap 在遇到 null 键时抛 NullPointerException(因为比较逻辑无法处理 null
  • ConcurrentHashMapHashtable 明确禁止 null 键和值,否则在 put() 时就抛异常
  • Arrays.asList() 返回的是固定大小的 List,底层是数组包装,调用 add()remove() 会抛 UnsupportedOperationException

真正写业务代码时,别只看接口名,得盯住具体实现类的行为边界——尤其是 null 处理、线程安全性、是否支持修改操作,这些才是线上出问题的地方。


# java  # 键值对  # java集合框架  # 为什么  # NULL  # for  # 循环  # 继承  # 接口  #   # Collection  # 线程  # map  # 并发  # 键值  # 才是  # 遍历  # 三大  # 两条  # 但它  # 的是  # 红黑  # 这是  # 桥接 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何在阿里云虚拟主机上快速搭建个人网站?  如何快速搭建自助建站会员专属系统?  详解Huffman编码算法之Java实现  如何做网站制作流程,*游戏网站怎么搭建?  浅谈javascript alert和confirm的美化  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  如何在七牛云存储上搭建网站并设置自定义域名?  JS中页面与页面之间超链接跳转中文乱码问题的解决办法  PythonWeb开发入门教程_Flask快速构建Web应用  详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  如何在IIS中配置站点IP、端口及主机头?  香港服务器租用费用高吗?如何避免常见误区?  如何获取免费开源的自助建站系统源码?  南京网站制作费用,南京远驱官方网站?  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程  如何为不同团队 ID 动态生成多个非值班状态按钮  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】  Laravel中间件如何使用_Laravel自定义中间件实现权限控制  如何在云服务器上快速搭建个人网站?  Win11怎样安装网易有道词典_Win11安装词典教程【步骤】  香港服务器部署网站为何提示未备案?  Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】  详解jQuery停止动画——stop()方法的使用  如何快速搭建个人网站并优化SEO?  如何实现javascript表单验证_正则表达式有哪些实用技巧  如何在IIS管理器中快速创建并配置网站?  php增删改查怎么学_零基础入门php数据库操作必知基础【教程】  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程  如何在服务器上配置二级域名建站?  如何在景安云服务器上绑定域名并配置虚拟主机?  php 三元运算符实例详细介绍  Laravel DB事务怎么使用_Laravel数据库事务回滚操作  如何生成腾讯云建站专用兑换码?  如何用好域名打造高点击率的自主建站?  Laravel事件监听器怎么写_Laravel Event和Listener使用教程  网站优化排名时,需要考虑哪些问题呢?  如何在腾讯云服务器快速搭建个人网站?  Laravel如何创建自定义Artisan命令?(代码示例)  如何续费美橙建站之星域名及服务?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  java ZXing生成二维码及条码实例分享  想要更高端的建设网站,这些原则一定要坚持!  Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理  中山网站制作网页,中山新生登记系统登记流程?