一、线性结构1. 数组 Array特点固定长度、连续内存、查询快、增删慢分一维数组、二维数组。示例代码java运行public class ArrayDemo { public static void main(String[] args) { // 1. 一维数组定义 int[] arr {10, 20, 30, 40}; // 根据下标取值 System.out.println(arr[1]); // 20 // 遍历数组 for (int num : arr) { System.out.print(num ); } // 2. 二维数组矩阵 int[][] matrix {{1,2},{3,4}}; System.out.println(\n matrix[0][1]); // 2 } }核心解释长度初始化后不可修改随机访问时间复杂度O(1)中间插入 / 删除需要移动元素O(n)适合长度固定、频繁查询场景。2. ArrayList 动态数组List 实现特点底层数组封装自动扩容有序可重复查询快、中间增删慢。示例代码java运行import java.util.ArrayList; public class ArrayListDemo { public static void main(String[] args) { // 创建集合 ArrayListString list new ArrayList(); // 添加元素 list.add(Java); list.add(MySQL); list.add(Redis); // 指定下标插入 list.add(1, Spring); // 获取元素 System.out.println(list.get(1)); // Spring // 删除元素 list.remove(MySQL); // 遍历 for (String s : list) { System.out.print(s ); } // 获取长度 System.out.println(\n长度 list.size()); } }核心解释默认容量 10扩容规则原容量*1.5允许null、元素可重复、有序尾部增删效率高中间操作大量移位。3. LinkedList 双向链表List/Deque特点底层双向链表无扩容头尾增删极快随机查询慢。示例代码java运行import java.util.LinkedList; public class LinkedListDemo { public static void main(String[] args) { LinkedListInteger link new LinkedList(); // 尾部添加 link.add(1); // 头部添加 link.addFirst(0); // 尾部添加 link.addLast(2); System.out.println(link.getFirst()); // 0 System.out.println(link.getLast()); // 2 link.removeFirst(); // 删除头节点 System.out.println(link); // [1, 2] } }核心解释每个节点存prev、value、next头尾增删O(1)按索引查找O(n)同时实现队列、双端队列接口可做栈 / 队列。4. Stack 栈后进先出 LIFO特点先进后出Java 推荐用Deque代替老旧 Stack 类。示例代码java运行import java.util.Deque; import java.util.LinkedList; public class StackDemo { public static void main(String[] args) { DequeString stack new LinkedList(); // 入栈 stack.push(A); stack.push(B); stack.push(C); System.out.println(stack.peek()); // 取栈顶不删除 C System.out.println(stack.pop()); // 出栈 C System.out.println(stack); // [B, A] } }核心解释push 入栈、pop 出栈、peek 查看栈顶适用场景表达式求值、括号匹配、函数调用栈。5. Queue 队列先进先出 FIFO普通队列 LinkedListjava运行import java.util.LinkedList; import java.util.Queue; public class QueueDemo { public static void main(String[] args) { QueueInteger queue new LinkedList(); queue.offer(1); // 入队 queue.offer(2); queue.offer(3); System.out.println(queue.peek()); // 队首 1 System.out.println(queue.poll()); // 出队 1 System.out.println(queue); // [2, 3] } }优先级队列 PriorityQueue自动元素排序默认小顶堆java运行import java.util.PriorityQueue; import java.util.Queue; public class PriorityQueueDemo { public static void main(String[] args) { QueueInteger pq new PriorityQueue(); pq.add(5); pq.add(2); pq.add(8); // 自动从小到大出队 while (!pq.isEmpty()) { System.out.print(pq.poll() ); // 2 5 8 } } }解释Queueoffer 入队、poll 出队、peek 队首PriorityQueue底层二叉堆自定义对象需重写比较器。二、哈希结构无序、去重、键值映射1. HashSet 哈希集合元素唯一无序底层 HashMap只存 keyjava运行import java.util.HashSet; import java.util.Set; public class HashSetDemo { public static void main(String[] args) { SetString set new HashSet(); set.add(苹果); set.add(香蕉); set.add(苹果); // 重复元素自动丢弃 System.out.println(set); // [苹果, 香蕉] System.out.println(set.contains(香蕉)); // true set.remove(香蕉); } }解释元素不可重复无序增删查平均O(1)自定义对象必须重写equals()hashCode()。2. TreeSet 有序集合红黑树自动升序去重java运行import java.util.TreeSet; public class TreeSetDemo { public static void main(String[] args) { TreeSetInteger treeSet new TreeSet(); treeSet.add(9); treeSet.add(3); treeSet.add(6); System.out.println(treeSet); // [3, 6, 9] 自动排序 } }解释底层红黑树查找、插入删除O(logn)元素必须实现 Comparable。3. HashMap 键值对哈希表最常用java运行import java.util.HashMap; import java.util.Map; public class HashMapDemo { public static void main(String[] args) { MapString, Integer map new HashMap(); // 存键值 map.put(张三, 20); map.put(李四, 22); map.put(张三, 21); // 覆盖旧值 System.out.println(map.get(张三)); // 21 // 判断key是否存在 System.out.println(map.containsKey(李四)); // 遍历键值对 for (Map.EntryString, Integer entry : map.entrySet()) { System.out.println(entry.getKey() entry.getValue()); } } }核心解释JDK1.8 底层数组 链表 红黑树key 唯一value 可重复允许一个 null key、多个 null value负载因子 0.75达到阈值自动扩容 2 倍平均读写O(1)。4. TreeMap 有序 Map红黑树key 自动排序java运行import java.util.TreeMap; public class TreeMapDemo { public static void main(String[] args) { TreeMapString, Integer treeMap new TreeMap(); treeMap.put(b, 2); treeMap.put(a, 1); System.out.println(treeMap); // {a1, b2} } }5. LinkedHashMap / LinkedHashSet保留插入顺序java运行LinkedHashMapString, Integer linkMap new LinkedHashMap(); linkMap.put(1,1); linkMap.put(2,2); System.out.println(linkMap); // 按插入顺序输出三、树结构1. 二叉树自定义实现java运行// 树节点 class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int val) { this.val val; } } public class BinaryTreeDemo { // 中序遍历左-根-右 public static void inOrder(TreeNode root) { if (root null) return; inOrder(root.left); System.out.print(root.val ); inOrder(root.right); } public static void main(String[] args) { // 构建二叉树 TreeNode root new TreeNode(1); root.left new TreeNode(2); root.right new TreeNode(3); inOrder(root); // 2 1 3 } }解释二叉树每个节点最多两个子节点遍历分为前序、中序、后序、层序。2. 二叉搜索树 BST左子树 根 右子树中序遍历有序TreeSet/TreeMap 底层。四、并发安全集合多线程专用1. ConcurrentHashMap线程安全 Mapjava运行import java.util.concurrent.ConcurrentHashMap; public class ConcurrentMapDemo { public static void main(String[] args) { ConcurrentHashMapString, Integer map new ConcurrentHashMap(); map.put(a, 1); map.get(a); } }解释分段锁 / CAS高并发性能远优于Hashtable。2. CopyOnWriteArrayList 线程安全 List写时复制读不加锁适合读多写少场景。java运行import java.util.concurrent.CopyOnWriteArrayList; CopyOnWriteArrayListString list new CopyOnWriteArrayList(); list.add(test);