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)
上一篇 2025年11月28日 上午11:22
下一篇 2025年11月28日 下午12:01


相关推荐

  • manus背后的秘密!一种摆脱“模型吞噬应用”魔咒的应用范式在孕育

    manus背后的秘密!一种摆脱“模型吞噬应用”魔咒的应用范式在孕育

    2026年3月15日
    3
  • pve虚拟机单网口(虚拟机做软路由)

    PVE虚拟网口扩展实现一线多拨PVE网口设置可以看到这里有两个物理网口我的物理网口enp3s0没有对应的vmbr1,需要先创建LinuxBridge,步骤如下:ROS虚拟网口设置这是关键一步,需要创建四个虚拟网口对应一个LAN口设置四个虚拟网口,完成如下:完成!…

    2022年4月16日
    694
  • idera激活码[在线序列号]

    idera激活码[在线序列号],https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月20日
    55
  • windows10 store 错误代码为 0x80072EFD

    windows10 store 错误代码为 0x80072EFD尝试了好多种方法 WindowsPower 手动设置 DNS4222 和 4221 删除临时文件均无效最后通过设置 网络 代理 关闭使用代理服务器 如果是关上的就点击打开 在关闭 重新建立了网络连接 让网络类型变成公共网络公共网络公共网络公共网络重要的事情说 3 变

    2026年3月16日
    2
  • Linux服务器php环境搭建教程

    Linux服务器php环境搭建教程RT.以前服务器端是使用phpnow套件。今天尝试在ubuntu下独立完成apache2+php+mysql的服务器运行环境。具体的步骤如下(下面的操作都需要使用root权限):|.Apache2安装sudoapt-getinstallapache2安装的成功标志是你在浏览器中打开127.0.0.1的时候会显示“Itworks!”的字眼。apache2访

    2022年6月29日
    19
  • Anaconda+Pycharm环境下的PyTorch配置方法

    Anaconda+Pycharm环境下的PyTorch配置方法写给新手的话 pycharm 是什么 为什么让我指定 interpreter 记事本最开始写 C 语言代码的时候 人们使用 vi 记事本等软件写代码 写完了之后用 GCC 编译 然后运行编译结果 就是二进制文件 python 也可以这样做 用记事本写完代码 保存成如 test py 的文件后 通过命令 pythontest py 可以运行这一文件 最初的 C 语言代码都是通过这种方式写的 但是人们很快发现了一个问题 就是

    2026年3月27日
    2

发表回复

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

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