hello啊,各位观众姥爷们!!!本baby今天来报道了!哈哈哈哈哈嗝🐶
面试官:说说java的集合框架
Java集合框架(Java Collections Framework,JCF)是Java中用于存储、操作和管理数据结构的核心库。它提供了一组标准化的接口、实现类和算法,使得开发者能够高效地处理各种数据集合。
1. 集合框架的核心接口
Java集合框架主要围绕以下几个核心接口构建:
(1) Collection
接口
- 特点:表示一组对象的集合。
- 子接口:
List
:有序集合,允许重复元素。
- 实现类:
ArrayList
、LinkedList
、Vector
、Stack
。
Set
:无序集合,不允许重复元素。
- 实现类:
HashSet
、LinkedHashSet
、TreeSet
。
Queue
:队列,支持先进先出(FIFO)或优先级操作。
- 实现类:
LinkedList
、PriorityQueue
、ArrayDeque
。
(2) Map
接口
- 特点:存储键值对(Key-Value),键唯一,值可重复。
- 实现类:
HashMap
、LinkedHashMap
、TreeMap
、Hashtable
、ConcurrentHashMap
。
2. 主要实现类及特性
(1) List 接口的实现类
类名 |
数据结构 |
线程安全 |
特点 |
ArrayList |
动态数组 |
不安全 |
随机访问快(O(1)),增删慢(需移动元素)。 |
LinkedList |
双向链表 |
不安全 |
增删快(O(1)),随机访问慢(O(n)),可用作队列或栈。 |
Vector |
动态数组 |
安全 |
线程安全但性能差,已被Collections.synchronizedList 或CopyOnWriteArrayList 替代。 |
(2) Set 接口的实现类
类名 |
数据结构 |
特点 |
HashSet |
哈希表 |
无序,允许null 元素,依赖hashCode() 和equals() 。 |
LinkedHashSet |
哈希表 + 链表 |
维护插入顺序,性能略低于HashSet 。 |
TreeSet |
红黑树 |
元素有序(自然顺序或Comparator ),增删查时间复杂度为 O(log n)。 |
(3) Map 接口的实现类
类名 |
数据结构 |
线程安全 |
特点 |
HashMap |
哈希表 |
不安全 |
允许null 键/值,查找性能 O(1),默认负载因子 0.75。 |
LinkedHashMap |
哈希表 + 链表 |
不安全 |
维护插入顺序或访问顺序(适合实现LRU缓存)。 |
TreeMap |
红黑树 |
不安全 |
键有序(自然顺序或Comparator ),增删查 O(log n)。 |
Hashtable |
哈希表 |
安全 |
线程安全但性能差,已被ConcurrentHashMap 替代。 |
ConcurrentHashMap |
分段锁/CAS |
安全 |
高并发场景下的首选,性能接近HashMap 。 |
3. 集合的遍历方式
(1) 迭代器 Iterator
List<String> list = new ArrayList<>();
Iterator<String> it = list.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
(2) 增强 for 循环
for (String s : list) {
System.out.println(s);
}
(3) Lambda 表达式(Java 8+)
list.forEach(s -> System.out.println(s));
4. 集合排序与比较
(1) Comparable
接口
- 自然排序:对象自身实现
compareTo()
方法。
class Student implements Comparable<Student> {
@Override
public int compareTo(Student o) {
return this.age - o.age;
}
}
(2) Comparator
接口
Comparator<Student> comparator = (s1, s2) -> s1.getName().compareTo(s2.getName());
Collections.sort(students, comparator);
5. 线程安全与并发集合
(1) 同步包装类
List<String> syncList = Collections.synchronizedList(new ArrayList<>());
Map<String, String> syncMap = Collections.synchronizedMap(new HashMap<>());
(2) java.util.concurrent
包
类名 |
特点 |
CopyOnWriteArrayList |
写时复制,读操作无锁,适合读多写少场景。 |
ConcurrentHashMap |
分段锁(JDK7)或CAS + 红黑树(JDK8+),高并发性能优异。 |
BlockingQueue |
支持阻塞操作的队列,如ArrayBlockingQueue 、LinkedBlockingQueue 。 |
6. 集合的性能对比
操作 |
ArrayList |
LinkedList |
HashMap |
TreeMap |
随机访问 |
O(1) |
O(n) |
O(1) |
O(log n) |
插入/删除(头) |
O(n) |
O(1) |
- |
- |
插入/删除(尾) |
O(1) |
O(1) |
- |
- |
搜索 |
O(n) |
O(n) |
O(1) |
O(log n) |
7. 工具类:Collections
和 Arrays
(1) Collections
- 提供静态方法操作集合:
sort()
:排序。
reverse()
:反转。
shuffle()
:随机打乱。
synchronizedXXX()
:生成同步集合。
(2) Arrays
- 提供静态方法操作数组:
asList()
:数组转List。
sort()
:排序。
binarySearch()
:二分查找。
8. Java 8+ 的增强
(1) Stream API
List<Integer> evenNumbers = list.stream()
.filter(n -> n % 2 == 0)
.collect(Collectors.toList());
(2) Lambda 表达式
list.removeIf(s -> s.length() > 5);
(3) 新集合方法
Map<String, List<Student>> groupByCity = students.stream()
.collect(Collectors.groupingBy(Student::getCity));
