Collection
├── Set(无序、无重复)
│ ├── HashSet // O(1) 增删查,无序
│ ├── LinkedHashSet // 保持插入顺序
│ └── TreeSet // 有序(红黑树),O(log n)
├── List(有序、可重复)
│ ├── ArrayList // 动态数组,O(1) 查,O(n) 增删
│ ├── LinkedList // 链表,O(n) 查,O(1) 增删头尾
│ └── Vector // 线程安全的ArrayList(较少用)
└── Queue(队列)
├── LinkedList // 普通队列
├── PriorityQueue // 优先级队列(小根堆)
├── Deque // 双端队列
│ └── LinkedList/ArrayDeque
└── BlockingQueue // 阻塞队列(多线程)
Map(键值对,无重复键)
├── HashMap // O(1) 平均,无序
├── LinkedHashMap // 保持插入顺序
├── TreeMap // 有序(红黑树),O(log n)
├── Hashtable // 线程安全(较少用)
└── ConcurrentHashMap // 线程安全的HashMap
Set<Integer> set = new HashSet<>();
set.add(1);
set.contains(1);
set.remove(1);
List<Integer> list = new ArrayList<>();
list.add(1);
list.get(0);
list.remove(0);
list.size();
Map<Integer, Integer> map = new HashMap<>();
map.put(1, 100);
map.get(1);
map.containsKey(1);
map.values();
map.entrySet();
Queue<Integer> q = new LinkedList<>();
q.offer(1);
q.poll();
q.peek();
Deque<Integer> dq = new ArrayDeque<>();
dq.addFirst(1);
dq.addLast(1);
dq.removeFirst();
dq.removeLast();
PriorityQueue<Integer> pq = new PriorityQueue<>();
pq.offer(5);
pq.poll();
pq.peek();
PriorityQueue<Integer> maxPq =
new PriorityQueue<>((a, b) -> b - a);
| 场景 | 推荐 | 复杂度 |
|---|
| 去重 | HashSet | O(1) |
| 计数 | HashMap | O(1) |
| TopK最大/最小 | PriorityQueue | O(log n) |
| 需要有序 | TreeSet/TreeMap | O(log n) |
| 保持插入顺序 | LinkedHashMap | O(1) |
| BFS/滑动窗口 | Queue/Deque | O(1) |
| LRU缓存 | LinkedHashMap | O(1) |
| 范围查询 | TreeMap | O(log n) |
Set<Integer> set = new HashSet<>();
set.add(1);
set.addAll(Arrays.asList(2,3));
set.contains(1);
set.remove(1);
set.clear();
set.size();
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(0, 99);
list.get(0);
list.set(0, 99);
list.remove(0);
list.indexOf(1);
list.subList(0, 2);
list.size();
LinkedList<Integer> list = new LinkedList<>();
list.addFirst(1);
list.addLast(1);
list.getFirst();
list.getLast();
list.removeFirst();
list.removeLast();
list.peekFirst();
list.peekLast();
Map<String, Integer> map = new HashMap<>();
map.put("a", 1);
map.putIfAbsent("b", 2);
map.get("a");
map.getOrDefault("a", 0);
map.containsKey("a");
map.containsValue(1);
map.remove("a");
map.clear();
map.size();
for(Map.Entry<String, Integer> e : map.entrySet()) {
String k = e.getKey();
Integer v = e.getValue();
}
map.forEach((k, v) -> {});
map.compute("a", (k, v) -> v + 1);
map.computeIfAbsent("a", k -> 0);
TreeMap<Integer, String> map = new TreeMap<>();
map.put(1, "a");
map.get(1);
map.remove(1);
map.firstKey();
map.lastKey();
map.headMap(5);
map.tailMap(5);
map.subMap(1, 5);
map.floorKey(5);
map.ceilingKey(5);
LinkedHashMap<String, Integer> map = new LinkedHashMap<>();
map.put("a", 1);
LinkedHashMap<String, Integer> lru =
new LinkedHashMap<String, Integer>(16, 0.75f, true) {
protected boolean removeEldestEntry(Map.Entry eldest) {
return size() > 100;
}
};
TreeSet<Integer> set = new TreeSet<>();
set.add(1);
set.remove(1);
set.first();
set.last();
set.floor(5);
set.ceiling(5);
set.headSet(5);
set.tailSet(5);
PriorityQueue<Integer> minHeap = new PriorityQueue<>();
minHeap.offer(5);
minHeap.poll();
minHeap.peek();
minHeap.size();
PriorityQueue<Integer> maxHeap =
new PriorityQueue<>((a, b) -> b - a);
PriorityQueue<Person> pq =
new PriorityQueue<>((p1, p2) -> p1.age - p2.age);
Queue<Integer> q = new LinkedList<>();
q.offer(1);
q.poll();
q.peek();
q.remove();
q.element();
q.size();
Deque<Integer> dq = new ArrayDeque<>();
dq.addFirst(1);
dq.pollFirst();
dq.peekFirst();
dq.addLast(1);
dq.pollLast();
dq.peekLast();
dq.push(1);
dq.pop();
dq.peek();
List<Integer> list = Arrays.asList(3, 1, 2);
Collections.sort(list);
Collections.sort(list, (a, b) -> b - a);
Collections.reverse(list);
Collections.shuffle(list);
Collections.max(list);
Collections.min(list);
Collections.frequency(list, 1);
Collections.binarySearch(list, 2);
Map<String, Integer> syncMap =
Collections.synchronizedMap(new HashMap<>());
| 操作 | HashMap | TreeMap | ArrayList | LinkedList |
|---|
| get | O(1) | O(log n) | O(1) | O(n) |
| put | O(1) | O(log n) | O(n) | O(n) |
| remove | O(1) | O(log n) | O(n) | O(n) |
| containsKey | O(1) | O(log n) | O(n) | O(n) |