1. List 系列
ArrayList
-
特点: 基于动态数组实现,随机访问快,尾部添加元素快
-
优点: 查询效率高(O(1)),使用简单直观
-
缺点: 插入删除操作慢(O(n)),需要移动元素,线程不安全
-
使用场景: 频繁查询,很少增删的场景
LinkedList
-
特点: 基于双向链表实现
-
优点: 插入删除效率高(O(1)),尤其是首尾操作
-
缺点: 随机访问慢(O(n)),内存占用较大
-
使用场景: 频繁增删操作,如队列实现
Vector
-
特点: 类似ArrayList但线程安全
-
优点: 多线程环境下安全
-
缺点: 性能较差,现已较少使用
-
使用场景: 对线程安全有要求且不追求高性能的场景
2. Set 系列
HashSet
-
特点: 基于HashMap实现,无序不重复
-
优点: 添加、删除、查找的效率都是O(1)
-
缺点: 无序,不能保证元素顺序
-
使用场景: 去重,不关心顺序的场景
LinkedHashSet
-
特点: 基于LinkedHashMap实现,有序不重复
-
优点: 维护元素插入顺序,查询性能好
-
缺点: 比HashSet消耗更多内存
-
使用场景: 既要去重又要保持插入顺序
TreeSet
-
特点: 基于红黑树实现,有序不重复
-
优点: 自动排序,范围查询效率高
-
缺点: 增删改查效率较低(O(logn))
-
使用场景: 需要自然排序或自定义排序的场景
3. Map 系列
HashMap
-
特点: 基于哈希表实现,键值对存储
-
优点: 增删改查效率高(O(1))
-
缺点: 无序,非线程安全
-
使用场景: 高性能的键值存储
LinkedHashMap
-
特点: 在HashMap基础上维护了元素的插入顺序
-
优点: 既有HashMap的高效也能保持顺序
-
缺点: 比HashMap消耗更多内存
-
使用场景: 需要记住键值对插入顺序的场景
TreeMap
-
特点: 基于红黑树实现,键值对有序存储
-
优点: 按键自动排序,支持范围操作
-
缺点: 性能略低于HashMap(O(logn))
-
使用场景: 需要按键排序的场景
Hashtable
-
特点: 类似HashMap但线程安全
-
优点: 多线程环境安全
-
缺点: 性能较差
-
使用场景: 已基本被ConcurrentHashMap替代
ConcurrentHashMap
-
特点: 线程安全的HashMap,分段锁设计
-
优点: 高并发性能好,线程安全
-
缺点: 复杂度高,略低于HashMap
-
使用场景: 高并发环境下的Map应用
遍历方式比较
Iterator 迭代器
-
优点:
-
标准遍历方式,适用所有集合
-
可以在遍历过程中安全地删除元素
-
提供了更细粒度的控制
-
缺点:
-
代码相对冗长
-
性能略低于直接索引访问
-
使用场景:
-
需要在遍历时删除元素
-
需要更多控制的场景
foreach (增强for循环)
底层使用的依旧是iterator
-
优点:
-
语法简洁优雅
-
代码可读性好
-
避免索引越界问题
-
缺点:
-
不能获取索引位置
-
不能在遍历时修改集合(会抛出ConcurrentModificationException)
-
对于基本类型的数组会有装箱操作
-
使用场景:
-
简单遍历且不需要修改集合
-
追求代码简洁性的场景