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

 

 

 

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • linux使用docker_docker bash

    linux使用docker_docker bash安装命令sudoaptinstalldocker.io查看安装sudodocker–version添加用户到docker组sudogpasswd-a$USERdocker重启dockersudosystemctlrestartdocker查看状态sudodockerps-a查看镜像sudodockerimages创建容器dockerrun-it–nameubuntu1ubuntudockerrun-…

  • 35 个 Java 代码性能优化总结 10-20「建议收藏」

    35 个 Java 代码性能优化总结 10-20

  • matlab 折线图 标记_matlab画折线图标记线

    matlab 折线图 标记_matlab画折线图标记线…’MarkerSize’,10)xlabel(‘x’);ylabel(‘y’);·用Matlab画图时,有时候需要对各种图标进行标注,例如,用“+”代表A的运动情况,“*”代表……画出来就成了折线图,请试验之(*);(,’:’,”)同时画两个函数若要改变颜色,在座标对后面加上相关字串即可:;((),”)若要同时改变颜色及图线……是用m…

  • 任务型sql

    任务型sql

  • 八皇后算法解析[通俗易懂]

    八皇后算法解析[通俗易懂]今天研究力扣的一道题死活写不出来对应的算法,没办法自己算法基础太差。于是看了下答案,发现使用什么回溯算法,菜鸟表示平时开发期间写的最复杂的程序就是写了两层for循环,已经很牛逼了有木有?这个回溯算法什么鬼?于是乎百度了下,算是了解了回溯算法是什么玩意儿。这里分析一波八皇后算法来加深一下理解。https://blog.csdn.net/microopithecus/article/details/…

  • source insight激活码3.5_source insight4.0安装

    source insight激活码3.5_source insight4.0安装SourceInsight3.x官方下载地址:http://www.sourceinsight.com/distribute/Si3563Setup.exe官方网站:http://www.sourceinsight.com/注册码:SI3US-230590-09757SI3US-840598-11493SI3US-404808-04697SI3US-510811-93484…

发表回复

您的电子邮箱地址不会被公开。

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