java HashTable和HashMap的区别详解「建议收藏」

java HashTable和HashMap的区别详解「建议收藏」一、HashTable1、HashTable是线程安全的,查看源码得知方法使用了同步锁synchronized,如下所示:2、key值不允许为null,如果插入key为null,就会报null指针异常错误,如下所示:注意:key为null,就没有hashcode,无法计算hash值二、HashMap1、HashMap非线程安全常…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

一、HashTable

1、HashTable 是线程安全的,查看源码得知方法使用了同步锁 synchronized,

如下所示:

java HashTable和HashMap的区别详解「建议收藏」

  

2、  key值不允许为null ,如果插入key 为null , 就会报null指针异常错误,如下所示:

注意:key为null,就没有hashcode,无法计算hash值

java HashTable和HashMap的区别详解「建议收藏」

 

二、HashMap

  1、HashMap 非线程安全 常用于单线程程序,多线程环境下可以采用concurrent并发包下的concurrentHashMap

 ,  key值允许为null, key为null的键值对永远都放在以table[0]为头结点的链表中 ,如下所示:

java HashTable和HashMap的区别详解「建议收藏」

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

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/192855.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 5.6(java学习笔记) queue

    5.6(java学习笔记) queue

    2021年6月14日
  • 递归算法一般需要利用栈实现_递归算法的结构

    递归算法一般需要利用栈实现_递归算法的结构一、计算器的计算思路分析我们以计算3+8*2-6这个算式为例:将算式解析为数字和符号:3,+,8,*,2,-,6准备一个用于存放数字的数字栈numStack,还有一个存放运算符号的符号栈symb

    2022年8月16日
  • c++链式前向星_链式基数排序图解

    c++链式前向星_链式基数排序图解图的存储方法很多,最常见的除了邻接矩阵、邻接表和边集数组外,还有链式前向星。链式前向星是一种静态链表存储,用边集数组和邻接表相结合,可以快速访问一个顶点的所有邻接点,在算法竞赛中广泛应用。链式前向星存储包括两种结构:边集数组:edge[],edge[i]表示第i条边; 头结点数组:head[],head[i]存以i为起点的第一条边的下标(在edge[]中的下标)structnode{intto,next,w;}edge[maxe];//边集数组,边数一般要设置比ma…

    2022年10月26日
  • 在测试集上训练,还能中CVPR?这篇IEEE批判论文是否合理?

    在测试集上训练,还能中CVPR?这篇IEEE批判论文是否合理?在测试集上训练,还能中CVPR?这篇IEEE批判论文是否合理?

    2022年4月21日
  • Java之Java特点

    Java之Java特点

    2021年7月21日
  • java socket 实现原理_java socket原理

    java socket 实现原理_java socket原理TCP/IP模型中有5层结构:应用层、传输层、网络层、数据链路层以及物理层。其中IP协议是位于网络层的,TCP协议是位于传输层的,通过IP协议可以使两台计算机使用同一种语言,从而允许Internet上连接不同类型的计算机和不同的操作系统的网络,IP协议只能保证计算机能够接收和发送分组数据,当计算机要和远程的计算机建立连接时,TCP协议会让它们建立连接:用于发送和接收数据的虚拟电路。在Java中…

    2022年7月7日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号