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

数组扩容

详细描述

相关推荐
努力的小陈^O^24 分钟前
问题:Spring循环依赖问题排查与解决
java·开发语言·前端
Ccjf酷儿25 分钟前
C++语言程序设计 (郑莉)第十章 泛型程序设计与C++标准模板库
开发语言·c++
HehuaTang1 小时前
requests 调大并对齐 limits 提升POD高负载场景下性能
java·docker·kubernetes
FreeBuf_1 小时前
利用零宽度字符的隐形JavaScript混淆工具InvisibleJS浮出水面
开发语言·javascript·ecmascript
SuperherRo1 小时前
JAVA攻防-Shiro专题&key利用链&CB1链分析&入口点&调用链&执行地&Class加载
java·shiro·反序列化·cb1链
lsx2024061 小时前
Go 语言指针
开发语言
沛沛老爹1 小时前
Web开发者转型AI:Agent Skills版本控制与管理实战——从Git到AI技能仓库
java·前端·人工智能·git·架构·rag
我命由我123451 小时前
充血模型与贫血模型
java·服务器·后端·学习·架构·java-ee·系统架构
wearegogog1231 小时前
基于MATLAB的IEEE 9节点系统潮流计算
开发语言·matlab
重学一遍2 小时前
Spring Security + JWT + Redis 的认证授权系统
java·redis·spring