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

数组扩容

详细描述

相关推荐
小高Baby@23 分钟前
网络授时笔记
开发语言·笔记·学习·php
weixin_4373982125 分钟前
Elasticsearch学习(1) : 简介、索引库操作、文档操作、RestAPI、RestClient操作
java·大数据·spring boot·后端·学习·elasticsearch·全文检索
MasterNeverDown25 分钟前
spring boot controller放到那一层
java·spring boot·后端
范纹杉想快点毕业28 分钟前
XML通过HTTP POST 请求发送到指定的 API 地址,进行数据回传
xml·c语言·开发语言·数据结构·c++·python·c#
黑客老陈30 分钟前
BaseCTF scxml 详解
开发语言·网络·python·sql·安全·web安全
Yang-Never34 分钟前
Kotlin->Kotlin协程的取消机制
android·java·开发语言·kotlin·android studio·idea
星迹日38 分钟前
数据结构:LinkedList与链表—无头单向链表(一)
java·数据结构·经验分享·笔记·链表·单向链表
float_六七1 小时前
C/C++头文件locale
c语言·开发语言·c++
不会玩技术的技术girl1 小时前
获取淘宝商品详情高级版 API 接口 Java 示例代码
java·开发语言·前端
tan180°1 小时前
Cpp::C++11右值引用与移动构造(30)
开发语言·数据结构·c++·后端·算法