Java基础面试-HashMap和HashTable

HashMap和HashTable的区别?

  • HashMap方法没有synchronized修饰,线程非安全,HashTable线程安全
  • HashMap允许key和value为null,而HashTable不允许

底层实现

数组+链表

jdk8开始链表高度到8、数组长度超过64,链表转变为红黑树,元素以内部类Node节点存在

  • 计算key的hash值,二次hash然后对数组长度取模,对应到数组下标,
  • 如果没有产生hash冲突(下标位置没有元素),则直接创建Node存入数组
  • 如果产生hash冲突,先进行equal比较,相同则取代该元素,不同,则判断链表高度插入链表,链表高度达到8,并且数组长度到64则转变为红黑树,长度低于6则将红黑树转回链表
  • key为null,存在下标0的位置

数组扩容

详细描述

相关推荐
无忧智库7 小时前
深度拆解:某大型医院“十五五”智慧医院建设方案,如何冲刺互联互通五级乙等?(附技术架构与实施路径)
java·数据库·架构
木木木一7 小时前
Rust学习记录--C8 常用的集合
开发语言·学习·rust
C_心欲无痕7 小时前
js - AbortController请求中止
开发语言·javascript·ecmascript
辞砚技术录7 小时前
MySQL面试题——索引、B+树
数据结构·数据库·b树·面试
yugi9878387 小时前
基于Matlab的晴空指数计算实现
开发语言·算法·matlab
song150265372987 小时前
空间站太阳能帆板电池 组件性能测试 AM0太阳光模拟器
开发语言·python
守护砂之国泰裤辣7 小时前
Windows+docker下简单kafka测试联调
java·运维·spring boot·docker·容器
不会c嘎嘎7 小时前
QT中的常用控件 (三)
开发语言·qt
代码方舟7 小时前
Java企业级风控实战:对接天远多头借贷行业风险版API构建信贷评分引擎
java·开发语言