外观
一句话答案
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。