回答知识总结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,读取不加锁,增删改加锁并复制新数组完成修改,适合读多写少,遍历不会报并发修改异常。

四、记忆小窍门

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

相关推荐
橘子汽水1682 小时前
Leetcode 230,98:二叉搜索树中第K小的元素,验证二叉搜索树
算法·leetcode·职场和发展
m沐沐2 小时前
【机器学习】DBSCAN聚类算法——原理、参数调优与实战
人工智能·python·深度学习·算法·机器学习·聚类·dbscan
问商十三载3 小时前
GEO优化的6个核心诊断工具,2026年实操版详解
人工智能·算法·机器学习
手写码匠3 小时前
华为云征文|DeepSeek-R1 智能问数 Agent 实战:Flexus X 实例 + Dify 构建企业级 Text-to-SQL 查询助手
人工智能·深度学习·算法·aigc
mifengxing3 小时前
Java集合与泛型
java·算法·复习笔记
liulilittle3 小时前
[OPENPPP2] ssea 算法详解(中文)
算法·x86·x64·simd·openppp2·ssea·base94
碧海银沙音频科技研究院4 小时前
蓝牙耳机使用WSDF5361锂保芯片进入船运模式实现方法
嵌入式硬件·算法
过期的秋刀鱼!4 小时前
学习曲线-过拟合和欠拟合要做什么以及原因
人工智能·python·深度学习·算法·机器学习·模型评估
m沐沐4 小时前
【自然语言处理】词向量转换与中文文本情感分类——从CountVectorizer到朴素贝叶斯
人工智能·算法·机器学习·自然语言处理·分类·中文分词·词向量转换