首页 > 其他分享 >11. 说说Hashtable 与 HashMap 的区别

11. 说说Hashtable 与 HashMap 的区别

时间:2024-12-23 15:56:03浏览次数:7  
标签:11 hash HashMap 线程 Hashtable key null

  1. 出生的版本不一样,Hashtable 出生于 Java 发布的第一版本 JDK 1.0,HashMap 出生于 JDK1.2。
  2. 都实现了 Map、Cloneable、Serializable(当前 JDK 版本 1.8)。
  3. HashMap 继承的是 AbstractMap,并且 AbstractMap 也实现了 Map 接口。Hashtable 继承Dictionary。
  4. Hashtable 中大部分 public 修饰普通方法都是 synchronized 字段修饰的,是线程安全的,HashMap 是非线程安全的。
  5. Hashtable 的 key 不能为 null,value 也不能为 null,这个可以从 Hashtable 源码中的 put 方法看到,判断如果 value 为 null 就直接抛出空指针异常,在 put 方法中计算 key 的 hash 值之前并没有判断 key 为 null 的情况,那说明,这时候如果 key 为空,照样会抛出空指针异常。
  6. HashMap 的 key 和 value 都可以为 null。在计算 hash 值的时候,有判断,如果key==null ,则其 hash=0 ;至于 value 是否为 null,根本没有判断过。
  7. Hashtable 直接使用对象的 hash 值。hash 值是 JDK 根据对象的地址或者字符串或者数字算出来的 int 类型的数值。然后再使用除留余数法来获得最终的位置。然而除法运算是非常耗费时间的,效率很低。HashMap 为了提高计算效率,将哈希表的大小固定为了 2 的幂,这样在取模预算时,不需要做除法,只需要做位运算。位运算比除法的效率要高很多。
  8. Hashtable、HashMap 都使用了 Iterator。而由于历史原因,Hashtable 还使用了Enumeration 的方式。
  9. 默认情况下,初始容量不同,Hashtable 的初始长度是 11,之后每次扩充容量变为之前的2n+1(n 为上一次的长度)而 HashMap 的初始长度为 16,之后每次扩充变为原来的两倍。
  10. Hashtable 是线程安全,推荐使用 HashMap 代替 Hashtable;如果需要线程安全高并发的话,推荐使用 ConcurrentHashMap 代替 Hashtable。

标签:11,hash,HashMap,线程,Hashtable,key,null
From: https://www.cnblogs.com/tim-zuo/p/18624215

相关文章

  • 题解:P11411 兰奇的卡牌游戏
    题解:P11411兰奇的卡牌游戏今天来讲一个超级缝合题目,所以要先讲一些前置。前置知识\(1\)——单调栈[USACO06NOV]BadHairDayS题目入口题目描述农夫约翰有\(N\)头奶牛正在过乱头发节。每一头牛都站在同一排面朝右,它们被从左到右依次编号为\(1,2,\cdots,N\)。编号......
  • PS2功能 sa1111 linux驱动程序
    /*linux/drivers/input/serio/sa1111ps2.cCopyright©2002RussellKingThisprogramisfreesoftware;youcanredistributeitand/ormodifyitunderthetermsoftheGNUGeneralPublicLicenseaspublishedbytheFreeSoftwareFoundation;eitherver......
  • YOLOv11训练参数详解
    一、训练参数详解modelstrNone指定用于训练的模型文件。接受指向 .pt 预训练模型或 .yaml 配置文件。对于定义模型结构或初始化权重至关重要。datastrNone数据集配置文件的路径(例如 coco8.yaml).该文件包含特定于数据集的参数,包括训练和 验证数据类名和类数。epochsint......
  • hot100-一刷-11二分查找(共6道题)
    题目题目链接题目描述代码实现分析:代码:题目题目链接题目描述代码实现分析:代码:题目题目链接题目描述代码实现分析:代码:题目题目链接题目描述代码实现分析:代码:题目题目链接题目描述代码实现分析:代码:题目题目链接题目描述代码实现分析:代......
  • FPGA实现256通道ADC芯片AD71124的数据采集
    一、背景介绍AD71124这款ADC芯片由ADI出品,封装比较特别如下图。其一般用在平板探测器上进行医疗图像数据采集,分辨率为16bit,有高达256个输入通道,可对256个模拟输入电压进行采集,并通过LVDS串行接口将转换后的数字量发送出来。对于医用平板探测器,AD71124可实现对图像像素数据的模拟......
  • 信息学奥赛一本通:1170:计算2的N次方
    【题目描述】任意给定一个正整数N(N<=100),计算2的n次方的值。【输入】输入一个正整数N。【输出】输出2的N次方的值。【输入样例】5【输出样例】32【参考程序一】(1)数据的接收方法和存贮方法       数据的接收和存贮:当输入的数很长时,可采用字符......
  • 11.21
    石家庄铁道大学课程管理系统1、项目需求:本项目所开发的学生选课系统完成学校对学生的选课信息的统计与管理,减少数据漏掉的情况,同时也节约人力、物力和财力。告别以往的人工统计。2.系统要求与功能设计2.1页面要求(1)能够在Tomcat服务器中正确部署,并通过浏览器查看;(2)网站页面整......
  • 11.22
    请假条管理系统1、项目需求:本项目所开发的学生请假条管理系统,完成个人请假信息的增删改查。2.系统要求与功能设计2.1页面要求(1)能够在Tomcat服务器中正确部署,并通过浏览器查看;(2)网站页面整体风格统一;(3)主页面包括要求新增请假申请、修改申请、删除申请、查询申请四个子菜单。......
  • 11.25
    考试要求一、本试卷为2022级《JAVA语言程序设计》上机考试试卷;二.注意编程规范:(1) 通过Eclipse添加类的方式建立类;(2) 程序开头部分注释班级、作者、学号、日期;(3) 注意程序代码中必要的空格与缩进;(4) 注意类、变量、方法的命名原则;三.考试结束后,将整个项目工程文件夹中的文件源......
  • 11.26
    一、本试卷为2021级《JAVA语言程序设计》上机考试试卷;二.注意编程规范:(1) 通过Eclipse添加类的方式建立类;(2) 程序开头部分注释班级、作者、学号、日期;(3) 注意程序代码中必要的空格与缩进;(4) 注意类、变量、方法的命名原则;三.考试结束后,将整个项目工程文件夹中的文件源代码和数据......