大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
一、HashTable
1、HashTable 是线程安全的,查看源码得知方法使用了同步锁 synchronized,
如下所示:
2、 key值不允许为null ,如果插入key 为null , 就会报null指针异常错误,如下所示:
注意:key为null,就没有hashcode,无法计算hash值
二、HashMap
1、HashMap 非线程安全 常用于单线程程序,多线程环境下可以采用concurrent并发包下的concurrentHashMap
, key值允许为null, key为null的键值对永远都放在以table[0]为头结点的链表中 ,如下所示:
2、HashMap 1.7 与 1.8 的区别
HashMap1.7 底层采用数组+链表实现
HashMap1.8底层采用数组+链表+(size>8)红黑树
3、 HashMap是如何解决hash冲突问题的
使用链表存放hash值相当且内容不等 存放到同一个链表中
4、 HashMap的pu底层是如何实现的
根据key判断为空的情况下,存放数组0
默认HashMap的初始容量为16,加载因子大小16×0.75=12 每次扩容x2倍
根据key计算hash值,存放到数组下标位置
如果当前size>加载因子阈值,开始x2倍扩容、
注意:1.8中链表长度大于8 的情况下,将链表转换为红黑树
5、HashMap的加载因子为啥是0.75
这是一个折中方案 空间利用率高 、冲突少 0.75 比较合适
6、HashMap 在1.7 数组扩容死循环问题
HashMap扩容采用了头插法
注解:
头插法就是最新的冲突存放在最最前面
尾插法就表示一直存放在最后的next
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/192855.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...