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

数组扩容

详细描述

相关推荐
程序员良辰3 分钟前
服务器 JDK 环境变量配置:一键安装和手动配置有什么区别?
开发语言·python
奈斯先生Vector10 分钟前
本地图片识别怎么接入多模态 AI?用 Python API 理解 GPT-4o Vision 的真实工作流
开发语言·人工智能·windows·python·网络协议·http·aigc
OPEN-F14 分钟前
C++17新特性精讲:结构化绑定、if constexpr与实用类型
开发语言·c++
CoderYanger15 分钟前
A.每日一题:3345. 最小可整除数位乘积 I
java·数据结构·程序人生·算法·leetcode·面试·学习方法
OPEN-F17 分钟前
C++并发编程:线程与互斥锁
开发语言·c++
俊昭喜喜里19 分钟前
C#中的decimal
开发语言·c#
小刘是地理大王19 分钟前
OpenFeign 兜底回调(fallback / fallbackFactory)实战指南
java·后端
橘子汽水16823 分钟前
Leetcode15:三数之和
java·数据结构·算法
Nolla24 分钟前
为什么 assertThrows 需要 () ->:Lambda 延迟执行与异常捕获
java