Java SE 集合框架
一、什么是集合框架?
集合框架是一套统一管理数据的类和接口体系,位于 java.util 包下,核心作用是 动态存储多个对象(不支持基本数据类型,需用包装类如 Integer、Character),并提供增删改查、排序、遍历等标准化操作。
二、思维导图

三、JavaSE面试题目
1.ArrayList 与 LinkedList 区别
ArrayList 底层基于动态数组实现,占用连续内存空间,因此随机访问(通过索引获取元素)效率极高,时间复杂度为 O (1),但在中间位置增删元素时需移动后续元素,效率较低(O (n)),内存占用主要用于存储数据,仅数组扩容时会预留少量空间;LinkedList 底层是双向链表结构,非连续内存存储,每个节点需额外记录前后指针,内存占用更高,但任意位置的增删只需修改指针指向,效率为 O (1),而随机访问需从头 / 尾遍历,效率低(O (n))。二者均线程不安全,前者适合频繁查询、少量增删场景,后者适合频繁增删、少量查询场景。
2.HashMap 原理
HashMap 是基于哈希表的键值对集合,JDK 1.8 后底层采用 “数组 + 链表 + 红黑树” 结构:数组作为哈希桶存储头节点,初始容量为 16 且始终为 2ⁿ(便于位运算计算索引);当多个 Key 经哈希计算得到相同索引(哈希冲突)时,先通过链表存储,当链表长度 > 8 且数组容量≥64 时转为红黑树,将查询效率从 O (n) 优化为 O (log n)。扩容机制为:当元素数量超过 “容量 × 扩容因子(默认 0.75)” 时,容量翻倍并重新迁移元素。其键的唯一性依赖 hashCode() 和 equals():相同对象的 hashCode() 必相等,equals() 必为 true;hashCode() 相等的对象可能为不同对象,需通过 equals() 进一步判断,因此自定义对象作为 Key 需同时重写这两个方法。
3.HashSet 去重原理
HashSet 本质是对 HashMap 的包装,其存储的所有元素均作为 HashMap 的 Key 存在,Value 固定为一个静态空对象。去重逻辑完全依赖 HashMap 的 Key 唯一性:添加元素时,先计算元素的 hashCode() 确定哈希桶索引,若索引位置无元素则直接存入;若有元素,先通过 equals() 比较,若返回 true 则视为重复元素,添加失败;若返回 false 则视为哈希冲突,存入链表或红黑树。因此,存储自定义对象时必须重写 equals() 和 hashCode(),否则会因默认方法计算的哈希值或 equality 判断不准确,导致无法正确去重。
更多推荐

所有评论(0)