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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm激活码2022(注册激活)

    (pycharm激活码2022)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~MLZP…

    2022年3月21日
    463
  • 树莓派4b OpenWrt做旁路由

    树莓派4b OpenWrt做旁路由主要分为以下几步:一、下载并刷入OpenWrt固件OpenWrt固件用的是Lean大的最新编译好的固件,按照正常的步骤在GitHub上下载并将二、进入路由器后台修改静态IP及相应的防火墙设置三、连接树莓派的wifi,并手动设置IP…

    2022年5月12日
    54
  • PHP数组转json「建议收藏」

    PHP数组转json「建议收藏」$json=array( ‘total’=>3, ‘rows’=>array( array( ‘value’=>’1’, ‘color’=>”#DC143C” ), array(

    2022年6月21日
    22
  • Asp.Net Core 使用Quartz基于界面画接口管理做定时任务

    Asp.Net Core 使用Quartz基于界面画接口管理做定时任务

    2021年6月8日
    122
  • LINUX centos 安装图形界面

    LINUX centos 安装图形界面以Centos6.5为例演示一下如何安装桌面环境。一、首先查看系统的运行级别以及是否安装了桌面环境1、使用命令runlevel查看当前系统运行级别,如图所示2、使用命令yumgrouplist|more查看是否安装了桌面环境的组件,如图所示二、再次从上面分析的结果看到,当前运行级别是3,而且也没有安装桌面环境的软件。然后我们使用命令查看一下桌…

    2022年5月10日
    42
  • java的outputstream_java输入流

    java的outputstream_java输入流我有这个InputStream:InputStreaminputStream=newByteArrayInputStream(myString.getBytes(StandardCharsets.UTF_8));如何将其转换为ServletInputStream?我努力了:ServletInputStreamservletInputStream=(ServletInputStrea…

    2022年9月2日
    7

发表回复

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

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