IT评测·应用市场-qidao123.com技术社区

标题: Java集合口试总结(标题来源JavaGuide) [打印本页]

作者: 南飓风    时间: 2025-4-6 07:59
标题: Java集合口试总结(标题来源JavaGuide)
问题1:说说 List,Set,Map 三者的区别?

在 Java 中,List、Set 和 Map 是最常用的集合框架(Collection Framework)接口,它们的重要区别如下:
1. List(列表)


2. Set(集合)


3. Map(映射)


总结对比
特性ListSetMap是否允许重复元素允许不允许Key 不允许重复,Value 允许是否包管次序包管插入次序HashSet 无序,LinkedHashSet 包管插入次序,TreeSet 排序HashMap 无序,LinkedHashMap 保持插入次序,TreeMap 按 key 排序是否可存 null允许多个仅 HashSet 允许一个HashMap 允许一个 null Key,多 null Value,TreeMap 不允许 null Key访问方式通过索引 (get(int index))迭代器 (Iterator)通过 Key (get(K key))实用场景需要有序存储并允许重复,如购物车、使命列表需要唯一元素,如用户ID需要键值映射,如用户信息 简单影象

问题2: List,Set,Map 在 Java 中分别由哪些对应的实现类?底层的数据结构?

在 Java 中,List、Set 和 Map 各自有多个常见的实现类,它们的底层数据结构不同,实用于不同的场景。下面详细分析各自的实现类及其底层结构。

1. List(列表)
List 重要有以下几个实现类:
(1)ArrayList


(2)LinkedList


(3)Vector


2. Set(集合)
Set 重要有以下几个实现类:
(1)HashSet


(2)LinkedHashSet


(3)TreeSet


3. Map(映射)
Map 重要有以下几个实现类:
(1)HashMap


(2)LinkedHashMap


(3)TreeMap


(4)Hashtable


(5)ConcurrentHashMap


总结
  类型
  实现类
  底层数据结构
  重要特点
  实用场景
  List
  ArrayList
  动态数组
  查询快,增删慢
  读多写少
  
  LinkedList
  双向链表
  插入/删除快,查询慢
  频繁增删
  
  Vector
  动态数组
  线程安全
  多线程
  Set
  HashSet
  哈希表
  无序,不重复
  唯一集合
  
  LinkedHashSet
  哈希表 + 双向链表
  插入次序
  唯一且有序
  
  TreeSet
  红黑树
  自动排序
  唯一且排序
  Map
  HashMap
  数组 + 链表 + 红黑树
  无序,查询快
  快速查找
  
  LinkedHashMap
  哈希表 + 双向链表
  按插入次序
  LRU缓存
  
  TreeMap
  红黑树
  Key 自动排序
  需要排序
  
  Hashtable
  哈希表
  线程安全,低效
  线程安全(少用)
  
  ConcurrentHashMap
  哈希表 + CAS
  高并发
  并发情况
   问题3:有哪些集合是线程不安全的?怎么办理呢?

1. 线程不安全的集合
(1)ArrayList(线程不安全)


(2)HashMap(线程不安全)


2. ArrayList vs. Vector(高频对比)
  对比项
  ArrayList
  Vector
  线程安全
  ❌ 非线程安全
  ✅ 线程安全(synchronized)
  底层数据结构
  动态数组
  动态数组
  扩容方式
  1.5x 扩容
  2x 扩容
  性能
  高(无锁)
  低(同步开销大)
  实用场景
  单线程
  多线程(但 CopyOnWriteArrayList 更推荐)
  




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4