请列举 Java 中常用的集合类,并简要介绍它们各自的特点与适用场景。
考察说明
考查对 Java 集合框架整体结构的理解,以及常用集合类的特点和选型能力。
回答思路
- 【回答框架 1】Java 集合框架主要分为两大体系:Collection 和 Map。Collection 下有 List、Set、Queue 等接口,Map 下主要有 HashMap、TreeMap 等实现类。List 有序且允许重复,Set 无序且不允许重复,Map 存储键值对。
- 【回答框架 2】List 常见实现有 ArrayList 和 LinkedList。ArrayList 基于动态数组,随机访问快,增删慢;LinkedList 基于双向链表,增删快,随机访问慢。实际开发中若无频繁中间插入删除,优先用 ArrayList。
- 【回答框架 3】Set 常见实现有 HashSet、LinkedHashSet 和 TreeSet。HashSet 基于 HashMap,无序且效率最高;LinkedHashSet 维护插入顺序;TreeSet 基于红黑树,可排序但性能稍低。Set 常用于去重场景。
- 【回答框架 4】Map 常见实现有 HashMap、LinkedHashMap 和 TreeMap。HashMap 基于哈希表,无序但性能高,允许一个 null 键和多个 null 值;LinkedHashMap 维护插入顺序;TreeMap 基于红黑树,按键排序。并发场景建议使用 ConcurrentHashMap。
- 【回答框架 5】Queue 接口代表队列,常用实现有 LinkedList(双端队列)和 PriorityQueue(优先级队列)。PriorityQueue 基于堆,可自定义优先级。此外还有线程安全的 BlockingQueue 实现,用于生产者消费者模型。
- 【关键点 1】Collection 接口下包含 List、Set、Queue,Map 独立于 Collection。
- 【关键点 2】ArrayList 基于动态数组,随机访问 O(1);LinkedList 基于链表,插入删除 O(1) 但随机访问 O(n)。
- 【关键点 3】HashSet 去重基于 hashCode 和 equals,需正确重写。
- 【关键点 4】HashMap 允许一个 null 键,Hashtable 不允许且线程安全但性能低。
- 【关键点 5】并发场景优先选择 ConcurrentHashMap,而不是 Hashtable。
- 【易错点 1】不要混淆 List 和 Set:List 有序可重复,Set 无序不可重复。
- 【易错点 2】注意 HashMap 的容量和负载因子影响性能,默认负载因子 0.75,过多扩容影响效率。
- 【易错点 3】TreeSet 和 TreeMap 要求元素实现 Comparable 或传入 Comparator,否则运行时报错。