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

四、记忆小窍门

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

相关推荐
I_belong_to_jesus17 小时前
C++关于分支预测的优化1
开发语言·c++·算法
Code_Solitude1 天前
C语言动态内存 + 柔性数组 + 数组名退化
c语言·算法·柔性数组
上海潭龙东海科技有限公司1 天前
客运站管控之动态孪生技术方案(新增一屏管控模块
数据仓库·人工智能·算法·重构·动态规划
YLCHUP1 天前
【思维&图论建模】题解:债权(debt)_图论_建模_思路转化_思维题目_C++算法竞赛
c++·笔记·算法·数学建模·贪心算法·深度优先·图论
思麟呀1 天前
背包DP(01背包+完全背包)
c++·算法
笑容掩饰我的失落1 天前
区块链从小白到精通(七):Solidity 语法精讲——数据类型、函数、修饰器与事件
算法·区块链·php·智能合约·哈希算法
Pniubi1 天前
力扣24. 两两交换链表中的节点(递归)
算法·leetcode·链表
꧁细听勿语情꧂1 天前
直接选择排序,堆排序,冒泡排序,递归快速排序、hoare版本、挖坑法、lomuto前后指针,非递归快速排序
c语言·开发语言·数据结构·算法
俊俊几年的1 天前
动态规划(Dynamic Programming)详解:从入门到 LeetCode Hot 100
linux·c++·算法·leetcode·嵌入式·动态规划·c