1、集合的分类:
必背关键字(只记这些,不容易乱)
- 两大主干:Collection 单列、Map 双列
- List 关键词:有序、可重复、有下标
- Set 关键词:无序、不重复、无下标
- Map 关键词:key-value、key 唯一
超短考场口述话术
Java 集合分成两大类:Collection 单列集合,每次存一个对象;Map 双列集合,存 key 和 value 一对数据。 Collection 又分 List、Set、Queue。List 有序可重复带索引;Set 元素不能重复;Queue 是先进先出队列。Map 的 key 不能重复,可以通过 key 找 value。
2、set怎么保证元素不重复
必背极简关键字
HashSet:hashCode 定位,equals 判内容;两者全同 = 重复
TreeSet:比较器返回 0 即为重复
LinkedHashSet:继承 HashSet,去重逻辑和 HashSet 完全一致,额外保留插入顺序
考场一句话速答
HashSet 先靠 hashCode 找位置,再用 equals 比对内容,全都一样就判定重复;TreeSet 通过比较器,对比结果为 0 则重复。
3、Hash冲突解决方式
必背极简关键字
拉链法:数组 + 链表 / 红黑树(HashMap);开放寻址:往后空位找;再哈希:换哈希函数;溢出区:单独存冲突数据
考场一句话速答
主流四种:拉链法、开放寻址、再哈希、公共溢出区。Java HashMap 使用拉链法,冲突元素挂链表,长链表转为红黑树。
记忆小窍门
拉链 = 挂链子;开放寻址 = 挨个往后挪;再哈希 = 换公式;溢出区 = 单独小仓库。HashMap 认准拉链法。
hashmap数据结构
必背极简关键字
JDK7:数组 + 链表;JDK8:数组 + 链表 + 红黑树;阈值 8 树化、阈值 6 退链
考场一句话速答
JDK1.8 的 HashMap 底层是哈希数组搭配链表,链表长度到 8 且数组足够长就转红黑树,节点少于 6 变回链表;JDK1.7 只有数组加链表。
记忆小窍门
7 只有链表;8 优化树化;8 树 6 链,平衡查询速度和维护成本。
hashmap、hashtable、concurrentHashMap区别
必背极简关键字
HashMap:不安全、可存 null、性能高; HashTable:全表 synchronized、不可 null、低效淘汰; ConcurrentHashMap:分段锁 (JDK7)/ 锁头节点 (JDK8)、线程安全、不可 null、并发最优。
考场一句话速答
HashMap 单线程最快,线程不安全支持 null;HashTable 锁住整张表,并发差、不能存 null;ConcurrentHashMap 细分锁粒度保证安全,多线程首选,同样不允许 key/value 为 null。
记忆小窍门
HashMap = 单线程专用;HashTable = 全上锁笨重;ConcurrentHashMap = 精准加锁,安全又快;三者只有 HashMap 能放 null。
hashmap的set流程
必背极简关键字
判空初始化→算 hash 找下标;空则直接存;key 重复覆盖;冲突链表 / 红黑树追加;链表 8 树化;超阈值扩容
考场一句话速答
先初始化数组,通过 hash 定位下标,空位直接存入;key 重复覆盖 value;冲突挂链表或红黑树,链表过长转红黑树,元素总数超标就扩容。
记忆小窍门
找位置→有空就放,重了替换;冲突挂链,链长变树;装太满扩容。
hashmap cap=2^n,为什么,怎么保证
必背极简关键字
原因:hash & (len-1)高效取模;非 2 次幂冲突暴增 保证:tableSizeFor 向上凑 2 次幂;默认 16;扩容翻倍
考场一句话速答
为了用位运算替代取模提升效率,减少哈希冲突;依靠 tableSizeFor 函数自动修正容量,加上每次扩容翻倍,全程保证容量是 2 的 n 次方。
记忆小窍门
位运算更快;len 全 1 才能均匀散列;随便给的容量靠 tableSizeFor 凑成 2 次方,扩容乘 2 永久合规。
hashmap hash方法实现
必背极简关键字
hash=key.hashCode ^ hashCode 右移 16 位;null 返回 0;高低位混合,让低位更随机,减少哈希冲突。
考场一句话速答
HashMap 的 hash 方法将 key 的 hashCode 右移 16 位再和原值异或,把高位混合到低位,让下标分布更均匀、降低冲突;key 为 null 直接返回 0。
记忆小窍门
高位移下来,和低位融合;低位更乱,下标不扎堆;null 统一下标 0
hashmap负载因子0.75,为什么
必背极简关键字
0.75 折中;太大冲突多,太小频繁扩容费内存;泊松分布碰撞最低
考场一句话速答
0.75 平衡内存利用率和哈希冲突,值太高冲突多查得慢,值太低扩容频繁浪费内存,统计学上该数值碰撞概率最低。
记忆小窍门
大 = 塞太满打架多;小 = 空太多总搬家;0.75 刚刚好,兼顾省钱和速度。
concurrentHashMap怎么实现的
必背极简关键字
JDK7:Segment 分段锁,ReentrantLock 锁分段; JDK8:无分段,CAS+synchronized 锁桶头节点,结构同 HashMap,多线程扩容。
考场一句话速答
JDK7 依靠 Segment 分段锁提升并发;JDK8 去掉分段,用 CAS 配合 synchronized 锁住哈希数组单个桶首节点,结构和 HashMap 一致,读写并发效率更高。
记忆小窍门
7 分大块上锁;8 精准锁小格子,无锁读、CAS 插空、有节点锁头结点。
cop yonwtitle ArrayList是什么,怎么实现的
必背极简关键字
写时复制;读无锁、写加锁复制新数组;弱一致性;读多写少适用
三、考场一句话速答
CopyOnWriteArrayList 是线程安全 List,读取不加锁,增删改加锁并复制新数组完成修改,适合读多写少,遍历不会报并发修改异常。
四、记忆小窍门
读随便读;写先复制、改新数组再换引用;多读少写才好用,写多容易卡。