集合框架概述
Java集合框架(Java Collections Framework)是一组用来存储和操作数据的类和接口,位于java.util包中。它提供了高效的数据结构和算法,简化了程序员的工作。
集合框架主要接口
1. Collection接口 (根接口)
- List:有序集合,元素可重复
- Set:无序集合,元素不可重复
- Queue:队列,先进先出(FIFO)
2. Map接口 (独立于Collection)
- 键值对存储结构
主要实现类
List接口实现类
- ArrayList
- 基于动态数组实现
- 随机访问快(O(1)),插入删除慢(O(n))
- 线程不安全
- LinkedList
- 基于双向链表实现
- 插入删除快(O(1)),随机访问慢(O(n))
- 实现了Deque接口,可用作队列或栈
- Vector
- 类似ArrayList,但线程安全
- 性能较差,已被ArrayList取代
- Stack (继承自Vector)
- 后进先出(LIFO)的栈结构
Set接口实现类
- HashSet
- 基于HashMap实现
- 无序,允许null元素
- 添加、删除、查找时间复杂度O(1)
- LinkedHashSet
- 继承HashSet,维护插入顺序
- 性能略低于HashSet
- TreeSet
- 基于TreeMap实现(红黑树)
- 元素按自然顺序或Comparator排序
- 添加、删除、查找时间复杂度O(log n)
Queue接口实现类
- PriorityQueue
- 基于优先级堆实现
- 元素按自然顺序或Comparator排序
- ArrayDeque
- 基于可调整大小的数组实现
- 可用作栈或队列
Map接口实现类
- HashMap
- 基于哈希表实现(数组+链表+红黑树)
- 允许null键和null值
- 无序,线程不安全
- LinkedHashMap
- 继承HashMap,维护插入顺序或访问顺序
- 性能略低于HashMap
- TreeMap
- 基于红黑树实现
- 键按自然顺序或Comparator排序
- Hashtable
- 类似HashMap,但线程安全
- 不允许null键和null值
- 已被ConcurrentHashMap取代
- ConcurrentHashMap
- 线程安全的HashMap
- 采用分段锁技术,性能优于Hashtable
集合工具类Collections
提供了一系列静态方法用于操作集合:
sort()
:排序shuffle()
:随机打乱reverse()
:反转synchronizedXxx()
:返回线程安全的集合unmodifiableXxx()
:返回不可修改的集合
集合遍历方式
for循环 (适用于List)
java
1
2
3for(int i=0; i<list.size(); i++) {
System.out.println(list.get(i));
}增强for循环
java
1
2
3for(String item : list) {
System.out.println(item);
}迭代器Iterator
java
1
2
3
4Iterator<String> it = list.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}ListIterator (仅List可用,可双向遍历)
java
1
2
3
4ListIterator<String> lit = list.listIterator();
while(lit.hasNext()) {
System.out.println(lit.next());
}forEach()方法 (Java8+)
java
1
list.forEach(item -> System.out.println(item));
集合选择原则
- 需要唯一性 → Set
- 需要有序 → List
- 需要键值对 → Map
- 需要快速访问 → ArrayList/HashMap
- 需要频繁插入删除 → LinkedList
- 需要排序 → TreeSet/TreeMap
- 需要线程安全 → ConcurrentHashMap/Collections.synchronizedXxx()
Java8+新特性
Stream API:函数式操作集合
java
1
list.stream().filter(s -> s.startsWith("A")).forEach(System.out::println);
默认方法:如List的sort()方法
java
1
list.sort(Comparator.naturalOrder());
不可变集合:Java9引入的工厂方法
java
1
List<String> immutableList = List.of("a", "b", "c");
掌握集合框架对于Java开发至关重要,合理选择集合类型可以显著提高程序性能和可维护性。