回答知识总结02

1、集合的分类:

必背关键字(只记这些,不容易乱)

  1. 两大主干:Collection 单列、Map 双列
  2. List 关键词:有序、可重复、有下标
  3. Set 关键词:无序、不重复、无下标
  4. 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,读取不加锁,增删改加锁并复制新数组完成修改,适合读多写少,遍历不会报并发修改异常。

四、记忆小窍门

读随便读;写先复制、改新数组再换引用;多读少写才好用,写多容易卡。

相关推荐
无忧.芙桃34 分钟前
位图妙用:512MB 实现 40 亿整数的存在性查询
c语言·c++·面试·哈希算法
朝朝辞暮i1 小时前
C++ 第 31C 课:Subscriber 到底是什么
开发语言·c++·算法
Evand J2 小时前
【MATLAB例程】三维RRT+APF路径规划与AOA-TDOA融合定位算法。附代码的下载链接
算法·matlab·路径规划·rrt·tdoa·apf·aoa
海绵宝宝转agent2 小时前
leetCode100算法开源笔记分享
笔记·算法
写后端的胖头鱼3 小时前
时间复杂度 & 空间复杂度
java·数据结构·算法·时间复杂度·空间复杂度
hahaha60163 小时前
黑体轨迹和色温--光源白点
人工智能·嵌入式硬件·算法·计算机视觉
海绵宝宝转agent3 小时前
基于Redis ZSet+AOP+注解实现限流注解算法
数据库·redis·算法
All for pursuit.4 小时前
【回溯-7】494.目标和
数据结构·c++·算法·leetcode
白杨尚青4 小时前
C++入门篇(十三):vector(上)——动态数组:构造、空间增长与迭代器失效
开发语言·c++·笔记·算法·stl
Jasmine_llq4 小时前
《P17461 [GESP202609 八级] 生成树计数》
算法·栈·tarjan 算法·边双连通分量·深度优先搜索 dfs·tarjan 保存当前路径节点·模乘法