Skip to content

集合框架详解

TIP

Java 集合框架提供了丰富的数据结构实现。主要分为 Collection(单列集合)和 Map(双列集合)两大类。

Collection 体系

Collection
├── List(有序可重复)
│   ├── ArrayList  → 数组实现,查询快
│   ├── LinkedList → 链表实现,增删快
│   └── Vector     → 线程安全(已淘汰)
├── Set(无序不可重复)
│   ├── HashSet    → 基于HashMap
│   ├── LinkedHashSet → 有序的HashSet
│   └── TreeSet   → 可排序
└── Queue(队列)
    └── LinkedList / PriorityQueue

ArrayList 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); // 线程安全包装