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

说说Hashtable 与 HashMap 的区别

时间:2023-09-23 16:32:36浏览次数:32  
标签:hash HashMap 区别 value 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,之后每次扩充变为原来的两倍。


标签:hash,HashMap,区别,value,Hashtable,key,null
From: https://blog.51cto.com/u_16255459/7579366

相关文章

  • [Java]BigDecimal与Double的区别和使用场景
    BigDecimal与Double的区别和使用场景背景在项目中发现开发小组成员在写程序时,对于Oracle数据类型为Number的字段(经纬度),实体映射类型有的人用Double有的人用BigDecimal,没有一个统一规范,为此我在这里总结记录一下。一般说到BigDecimal与Double,绕不开的就是金融或电商行业,毕竟涉及......
  • vue中created和mounted区别
    在Vue.js中,created和mounted都是生命周期钩子函数,用于在组件不同的生命周期阶段执行代码。它们的主要区别如下:1.created钩子函数:2.created在组件实例被创建后立即调用。此时组件的实例已经被创建,并且组件的数据观测(dataobservation)和事件机制已经初始化完成。3.created......
  • 全面分析 Vue 的 computed 和 watch 的区别
    全面分析Vue的computed和watch的区别 一、computed介绍computed用来监控自己定义的变量,该变量在data内没有声明,直接在computed里面定义,页面上可直接使用。//基础使用{{msg}}<inputv-model="name"/>//计算属性computed:{msg:function(){retur......
  • cookie和session的区别
        ......
  • http和https协议的区别
    区别HTTP明文传输,数据都是未加密的,安全性较差,HTTPS(SSL+HTTP)数据传输过程是加密的,安全性较好。使用HTTPS协议需要到CA(CertificateAuthority,数字证书认证机构)申请证书,一般免费证书较少,因而需要一定费用。证书颁发机构如:Symantec、Comodo、GoDaddy和GlobalSign等......
  • post请求和get请求的区别
    post请求和get请求的区别(1)post请求更安全(不会作为url的一部分,不会被缓存、保存在服务器日志、以及浏览器浏览记录中,get请求的是静态资源,则会缓存,如果是数据,则不会缓存)(2)post请求发送的数据更大(get请求有url长度限制,http协议本身不限制,请求长度限制是由浏览器和web服务器决定和设......
  • MyBatis中 # 和 $ 区别
    在使用mybatis框架开发项目编写SQL语句的时候,经常需要用到变量替换值,那么用来替换变量值的操作经常用到$和#这两个符号,同样在一些Java面试中也经常被问到它们的区别。那么它们在使用上面有什么区别呢?下面根据使用情况分析总结,两者的区别。#占位符的特点1.MyBatis处理#{}占位......
  • 字符'1'和整数1的区别
    字符'1'和整数1的区别━━━━━━━━━━━━━━━━━━━━━━字符'1'是一个符号,在内存中以ASCII码对应的二进制00110001存放;整数1是一个数字,在内存中以数字1的二进制的补码00000001存放。......
  • 物联网中北向接口和南向接口区别
    北向接口和南向接口的区别:功能方向:北向接口面向上层设备,提供设备管理和监控功能;南向接口面向下层设备,实现设备的配置和控制。数据传输:北向接口主要用于传输设备状态、数据上报、性能和配置信息;南向接口主要用于传输命令和配置信息。协议和命令集:北向接口通常使用标准的网络......
  • 微信小程序全局变量(globalData)和缓存(StorageSync)的区别和用法
    globalData和storage的区别一、app.globalData是全局变量,下次进入的时候,就要重新获取,一般用于:1、保存一些可能涉及安全类的数据,例如资源类,每次需要很准确的,就建议用全局变量。2、全局变量每次关闭小程序重新打开的时候,都会进行初始化更新。二、缓存(StorageSync)本地存储,storage......