集合框架详解
TIP
Java 集合框架提供了丰富的数据结构实现。主要分为 Collection(单列集合)和 Map(双列集合)两大类。
Collection 体系
Collection
├── List(有序可重复)
│ ├── ArrayList → 数组实现,查询快
│ ├── LinkedList → 链表实现,增删快
│ └── Vector → 线程安全(已淘汰)
├── Set(无序不可重复)
│ ├── HashSet → 基于HashMap
│ ├── LinkedHashSet → 有序的HashSet
│ └── TreeSet → 可排序
└── Queue(队列)
└── LinkedList / PriorityQueueArrayList vs LinkedList
java
// ArrayList:数组实现,随机访问O(1)
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
String s = list.get(0); // O(1) 快速
// LinkedList:双向链表,插入删除O(1)
List<String> linkedList = new LinkedList<>();
linkedList.add("A");
linkedList.add(0, "B"); // 头部插入快HashMap 原理
java
Map<String, Integer> map = new HashMap<>();
map.put("age", 25);
map.put("score", 90);
System.out.println(map.get("age")); // 25
// 遍历
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}HashMap 要点
- JDK8 之前:数组 + 链表
- JDK8 之后:数组 + 链表 + 红黑树(链表长度>8 转红黑树)
- 默认负载因子 0.75,扩容为原容量的 2 倍
Collections 工具类
java
List<Integer> list = new ArrayList<>(Arrays.asList(3, 1, 4, 1, 5));
Collections.sort(list); // 排序
Collections.reverse(list); // 反转
Collections.shuffle(list); // 打乱
Collections.max(list); // 最大值
Collections.min(list); // 最小值
List<Integer> syncList = Collections.synchronizedList(list); // 线程安全包装