集合家谱(√ 为线程安全,★ 为高频使用)

Collection 接口常用 API(所有单列集合通用)

功能 示例
add(E e) / addAll(Collection<? extends E> c)
remove(Object o) / removeIf(Predicate<? super E> filter)
contains(Object o) / isEmpty() / size()
遍历 forEach(Consumer<? super E> action)(Java 8+)
转数组 toArray() / toArray(T[] a)
批量操作 retainAll() 交集 / removeAll() 差集

List、Set、Queue 速用模板

List

List<String> list = new ArrayList<>(32);   // 初始容量,减少扩容
list.add("A");
list.forEach(System.out::println);

Set 去重

Set<Integer> set = new HashSet<>(list);    // 一行去重

Queue 无阻塞

Queue<String> q = new ArrayDeque<>();
q.offer("task");      // 入队
String head = q.poll(); // 出队,空返回 null

优先级队列(小顶堆)

Queue<Integer> pq = new PriorityQueue<>((a, b) -> b - a); // 大顶堆
pq.offer(5); pq.offer(1);
System.out.println(pq.peek()); // 5

Map 常用姿势

简洁写法(Java 9+)

Map<String, Integer> map = Map.of("K1", 1, "K2", 2); // 不可变

传统写法

Map<String, String> map = new HashMap<>();
map.put("key", "value");
map.merge("key", 1, Integer::sum); // Java 8 merge
map.forEach((k, v) -> System.out.println(k + "=" + v));

按插入顺序遍历

map = new LinkedHashMap<>(); // 保序

并发场景

ConcurrentHashMap<String, Long> cmap = new ConcurrentHashMap<>();
cmap.computeIfAbsent("id", k -> loadFromDB(k)); // 原子复合操作

面试坑点一句话

  1. ArrayList 扩容 ×1.5,初始容量可传,避免频繁拷贝。

  2. HashMap 初始容量 = (预计元素数 / 负载因子) + 1,减少 rehash。

  3. 别用 Vector / Hashtable,用 Collections.synchronizedListConcurrentHashMap

  4. for-each 循环里删元素必用 Iterator.remove(),否则会 ConcurrentModificationException

  5. Queuepoll() 空返回 nullremove() 空抛异常,按场景选。

更多推荐