HashMap 和 Hashtable 的区别[通俗易懂]

HashMap 和 Hashtable 的区别[通俗易懂]HashMap和Hashtable的区别线程是否安全:HashMap是非线程安全的,HashTable是线程安全的,因为HashTable内部的方法基本都经过synchronized修饰。(如果你要保证线程安全的话就使用ConcurrentHashMap吧!);效率:因为线程安全的问题,HashMap要比HashTable效率高一点。另外,HashTable基本被淘汰,不要在代码中使用它;对Nullkey和Nullvalue的支持:HashMap可以存

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

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

HashMap 和 Hashtable 的区别

  • 线程是否安全: HashMap 是非线程安全的,HashTable 是线程安全的,因为 HashTable 内部的方法基本都经过synchronized 修饰。(如果你要保证线程安全的话就使用 ConcurrentHashMap 吧!);
  • 效率: 因为线程安全的问题,HashMap 要比 HashTable 效率高一点。另外,HashTable 基本被淘汰,不要在代码中使用它;
  • 对 Null key 和 Null value 的支持: HashMap 可以存储 null 的 key 和 value,但 null 作为键只能有一个,null 作为值可以有多个;HashTable 不允许有 null 键和 null 值,否则会抛出 NullPointerException。
  • 初始容量大小和每次扩充容量大小的不同 : ① 创建时如果不指定容量初始值,Hashtable 默认的初始大小为 11,之后每次扩充,容量变为原来的 2n+1。HashMap 默认的初始化大小为 16。之后每次扩充,容量变为原来的 2 倍。② 创建时如果给定了容量初始值,那么 Hashtable 会直接使用你给定的大小,而 HashMap 会将其扩充为 2 的幂次方大小(HashMap 中的tableSizeFor()方法保证,下面给出了源代码)。也就是说 HashMap 总是使用 2 的幂作为哈希表的大小,后面会介绍到为什么是 2 的幂次方。
  • 底层数据结构: JDK1.8 以后的 HashMap 在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为 8)(将链表转换成红黑树前会判断,如果当前数组的长度小于 64,那么会选择先进行数组扩容,而不是转换为红黑树)时,将链表转化为红黑树,以减少搜索时间。Hashtable 没有这样的机制。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

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


相关推荐

  • 字符串放到数组里面_shell dash使用数组

    字符串放到数组里面_shell dash使用数组先引用一段资料,出自:http://bbs.chinaunix.net/thread-4125147-1-1.html红色注释为个人添加————————————————————–搬运内容分割线———————————————————–

    2022年10月26日
    0
  • protel99se基本教程及使用教程

    protel99se基本教程及使用教程protel99se基本教程1、启动Protel99SE通常直接用桌面的快捷方式进入,双击图标即可;或者通过开始菜单由程序方式进入。其界面如图1-1所示。此时菜单栏里有四个下拉菜单选项,分别是向下的箭头项系统菜单,Files文件菜单,View视图菜单和Help帮助菜单。2、软件系统参数设置Protel99SE运行后的第一件事,必须调整参数设置,否则由于字体的问题会造成界面中的…

    2022年5月7日
    988
  • netty bytebuf转byte数组_netty udp

    netty bytebuf转byte数组_netty udp网络传输的载体是byte,这是任何框架谁也逃脱不了的一种规定,JAVA的NIO提供了ByteBuffer,用来完成这项任务,当然ByteBuffer也很好的完成了这个任务,Netty也提供了一个名字很相似的载体叫做ByteBuf,相比于ByteBuf而言,它有着更加更多友善的API,也更加易于维护,并且它可以扩容一般来说,ByteBuf都是维护一个byte数组的,它的内部格式是

    2022年9月19日
    0
  • java定义一个数组并初始化_java中什么是数组

    java定义一个数组并初始化_java中什么是数组介绍学习Java的朋友想必对数组并不陌生,它需要使用之前对其进行初始化,这是因为数组是引用类型,声明数组只是声明一个引用类型的变量,并不是数组对象本身,只要让数组变量指向有效的数组对象,程序中就可使用该数组变量来访问数组元素。所谓数组初始化就是让数组名指向数组对象的过程,该过程主要分为两个步骤,一是对数组对象进行初始化,即为数组中的元素分配内存空间和赋值,二是对数组名进行初始化,即为数组名赋值为数…

    2022年9月13日
    0
  • ios 改变系统UITabbar 和UINavigaitonbar的黑线的颜色

    ios 改变系统UITabbar 和UINavigaitonbar的黑线的颜色

    2021年9月5日
    41
  • Java SpringBlade「建议收藏」

    Java SpringBlade「建议收藏」项目运行后,怎么查看接口原文:https://github.com/xiaoymin/swagger-bootstrap-ui/blob/master/README_zh.mdswagger-bo

    2022年8月3日
    3

发表回复

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

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