跳到主要内容

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)

适用场景说明

选择 List

  • 需要保持元素顺序
  • 允许重复元素
  • 需要按索引访问
List<String> names = new ArrayList<>();
names.add("张三");
names.add("李四");
String first = names.get(0); // "张三"

选择 Set

  • 不需要重复元素
  • 需要快速查找
  • 不需要顺序(或需要排序)
Set<String> uniqueNames = new HashSet<>();
uniqueNames.add("张三");
uniqueNames.add("张三"); // 不会重复

选择 Map

  • 需要键值对映射
  • 需要快速查找
  • 不需要顺序(或需要排序)
Map<String, Integer> scores = new HashMap<>();
scores.put("张三", 90);
scores.put("李四", 85);
int score = scores.get("张三"); // 90

选择 Queue

  • 需要 FIFO(先进先出)
  • 需要优先级
  • 需要双端操作
Queue<String> queue = new LinkedList<>();
queue.offer("任务1");
queue.offer("任务2");
String task = queue.poll(); // "任务1"

性能对比

操作ArrayListLinkedListHashMapTreeMap
添加O(1)O(1)O(1)O(log n)
删除O(n)O(1)O(1)O(log n)
查找O(1)O(n)O(1)O(log n)
排序需要排序需要排序无序已排序

小结

Java 集合对照要点:

  • List:有序可重复,ArrayList 和 LinkedList
  • Set:无序不重复,HashSet 和 TreeSet
  • Map:键值对,HashMap 和 TreeMap
  • Queue:队列,LinkedList 和 PriorityQueue

关键要点

  • 根据需求选择合适的集合
  • 了解各集合的性能特点
  • 注意线程安全性
  • 使用泛型保证类型安全

这是 Java 集合的快速对照参考,帮助你选择合适的集合类型。