Java集合框架提供统一、可扩展、类型安全的容器接口与实现,解决数组长度固定、缺乏内置算法等问题,支持动态扩容、泛型约束、统一操作契约及并发安全等特性。
Java集合框架的核心作用是提供一套统一、可扩展、类型安全的数据容器接口与实现,用来高效地存储、检索、操作一组对象。
解决数组的硬编码限制
原生数组长度固定、无法动态增减,且缺乏内置的查找、排序、去重等能力。集合框架用 ArrayList、LinkedList、HashSet 等实现类替代,支持运行时扩容、自动装箱/拆箱,并通过接口(如 List、Set、Map)屏蔽底层差异。
-
ArrayList适合随机访问多、插入删除少的场景;LinkedList反之,但注意它不是为快速遍历设计的 - 使用泛型(如
List)可避免运行时ClassCastException,编译期就约束类型 - 数组转集合不能直接用
Arrays.asList()得到可变集合——它返回的是固定大小的List实现,添加/删除会抛UnsupportedOperationException
统一操作契约与算法复用
所有集合都实现 Collection 或 Map 接口,让通用逻辑(如遍历、过滤、聚合)能脱离具体实现编写。工具类 Collections 和 Arrays 提供静态方法,比如 Collections.sort() 要求 List 元素实现 Comparable 或传入 Comparator。
-
stream().filter(...).map(...).collect(...)是现代写法,但要注意parallelStream()并非总更快,尤其在小数据集或有状态操作时 -
HashMap的put()平均时间复杂度是 O(1),但若hashCode()实现不合理(如全返回 0),会退化成链表遍历,变成 O(n) - 修改正在被
Iterator遍历的集合,会触发ConcurrentModificationException——除非用Iterator.remove()或并发集合(如ConcurrentHashMap)
区分不同语义的数据组织方式
集合框架强制开发者思考“我要表达什么关系”:是有序可重复(List)、无序不重复(Set)、键值映射(Map),还是线程安全需求(Vector 已过时,应选 CopyOnWriteArrayList 或 ConcurrentHashMap)。