Java 集合对照表
Java 集合框架提供了丰富的数据结构。本章提供集合的快速对照参考。
List / Set / Map / Queue 对照
List(有序,可重复)
| 实现类 | 特点 | 适用场景 |
|---|---|---|
| ArrayList | 数组实现,随机访问快 | 频繁访问,较少插入删除 |
| LinkedList | 链表实现,插入删除快 | 频繁插入删除 |
| Vector | 线程安全,已过时 | 不推荐使用 |
| Stack | 栈,继承 Vector | 使用 Deque 替代 |
Set(无序,不可重复)
| 实现类 | 特点 | 适用场景 |
|---|---|---|
| HashSet | 哈希表实现,无序 | 快速查找,不需要顺序 |
| LinkedHashSet | 哈希表+链表,保持插入顺序 | 需要保持插入顺序 |
| TreeSet | 红黑树实现 ,有序 | 需要排序 |
Map(键值对)
| 实现类 | 特点 | 适用场景 |
|---|---|---|
| HashMap | 哈希表实现,无序 | 快速查找,不需要顺序 |
| LinkedHashMap | 哈希表+链表,保持插入顺序 | 需要保持插入顺序 |
| TreeMap | 红黑树实现,有序 | 需要排序 |
| Hashtable | 线程安全,已过时 | 使用 ConcurrentHashMap |
Queue(队列)
| 实现类 | 特点 | 适用场景 |
|---|---|---|
| LinkedList | 双向队列 | 队列和栈 |
| PriorityQueue | 优先级队列 | 需要优先级 |
| ArrayDeque | 数组实现的双端队列 | 高效的双端队列 |
常用实现类对比
ArrayList vs LinkedList
// ArrayList:随机访问快
List<String> list1 = new ArrayList<>();
list1.get(0); // O(1)
list1.add(0, "item"); // O(n)
// LinkedList:插入删除快
List<String> list2 = new LinkedList<>();
list2.get(0); // O(n)
list2.add(0, "item"); // O(1)
HashMap vs TreeMap
// HashMap:无序,O(1) 查找
Map<String, Integer> map1 = new HashMap<>();
map1.put("key", 1); // O(1)
map1.get("key"); // O(1)
// TreeMap:有序,O(log n) 查找
Map<String, Integer> map2 = new TreeMap<>();
map2.put("key", 1); // O(log n)
map2.get("key"); // O(log n)
HashSet vs TreeSet
// HashSet:无序,O(1) 查找
Set<String> set1 = new HashSet<>();
set1.add("item"); // O(1)
set1.contains("item"); // O(1)
// TreeSet:有序,O(log n) 查找
Set<String> set2 = new TreeSet<>();
set2.add("item"); // O(log n)
set2.contains("item"); // O(log n)