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的位置

数组扩容

详细描述

相关推荐
JQShan3 分钟前
为什么 Swift 的反射像个“玩具”?聊聊 Mirror 背后的设计哲学
面试·swift·设计
qq_340474026 分钟前
5.2.1 WPF 通过ItemControl自己做柱状图
java·开发语言·wpf
竹等寒6 分钟前
Go红队开发— 收官工具
开发语言·网络·后端·安全·golang
lqstyle6 分钟前
面试必备之jvm垃圾收集器
后端·面试
M1A114 分钟前
Java 时间处理:轻松掌握 java.time 包
java·后端
网络研究院14 分钟前
您需要了解的有关 Go、Rust 和 Zig 的信息
开发语言·rust·go·功能·发展·zig
守护者17015 分钟前
JAVA学习-练习试用Java实现“实现一个Hadoop MapReduce任务,对大数据集中的日志数据进行解析和筛选”
java·学习
失乐园16 分钟前
万亿级吞吐背后的秘密:Kafka核心架构与源码级实战调优指南
java·后端·面试
MacroZheng18 分钟前
超越 Xshell!号称下一代终端神器,用完爱不释手!
java·linux·后端
胡斌附体22 分钟前
Qt之QTextEdit控制文本滚动, 停止滚动, 开始滚动, 鼠标控制滚动
开发语言·c++·qt