Skip to content
基础

一句话答案

Throwable 分 Error(不可恢复)和 Exception,Exception 分 Checked(编译时检查)和 Unchecked(RuntimeException)。

核心要点

集合框架全景:

Collection
├── List(有序,可重复)
│   ├── ArrayList(动态数组)
│   ├── LinkedList(双向链表)
│   └── Vector(线程安全,已过时)
├── Set(无序,不可重复)
│   ├── HashSet(底层 HashMap)
│   ├── LinkedHashSet(保留插入顺序)
│   └── TreeSet(红黑树,有序)
└── Queue(队列)
    ├── LinkedList(实现了 Deque)
    ├── PriorityQueue(最小堆)
    ├── ArrayDeque(双端队列,推荐)
    └── BlockingQueue(线程安全,如 LinkedBlockingQueue)

Map(键值对)
├── HashMap(无序,允许 null key)
├── LinkedHashMap(保留插入/访问顺序)
├── TreeMap(红黑树,按 key 排序)
├── Hashtable(线程安全,已过时)
├── ConcurrentHashMap(线程安全,推荐)
└── WeakHashMap(弱引用 key)

选型原则:

  • 需要快速随机访问 → ArrayList
  • 频繁头尾插删 → ArrayDeque
  • 不重复且需要排序 → TreeSet
  • 键值对且线程安全 → ConcurrentHashMap
追问与易错

追问方向:

  • Error 和 Exception 的区别?(Error 不应捕获如 OOM/StackOverflow)
  • try-with-resources 底层怎么实现的?(编译器生成 finally + close)
  • finally 一定会执行吗?(System.exit/JVM 崩溃/守护线程终止时不会)

易错点:

  • ❌ "finally 中 return 覆盖 try 中 return"——会的,但这是坏实践
  • ❌ 随意使用 catch(Exception e) 吞异常——应该具体异常具体处理

💡 记忆锚点

Collection三条线:List有序可重复、Set无序不重复、Queue先进先出。Map独立一族。选型口诀:随机访问ArrayList,线程安全ConcurrentHashMap,队列/栈用ArrayDeque,排序用TreeSet/TreeMap。