HashMap与HashTable的异同点有哪些
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,本篇内容介绍了"HashMap与HashTable的异同点有哪些"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够
千家信息网最后更新 2025年12月02日HashMap与HashTable的异同点有哪些
本篇内容介绍了"HashMap与HashTable的异同点有哪些"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
相同点: 1>都是Map的子类。 2>都是基于Entry数组实现的。 不同点: 1>HashMap多线程下是不安全的,HashTable是线程安全的。 2>HashMap的key和value都允许为null,HashTable的key和value都不允许为null(key或value为null时会抛出空指针异常)。 3>HashMap的默认容量是16,扩容后的容量是之前的2倍;HashTable的默认容量是11,扩容后的容量是之前的2倍+1。 4>获取bucket的方式不同: ------------------------------------------------- HashTable获取数组下标的方式:取模法 代码: int hash = hash(key); int index = (hash & 0x7FFFFFFF) % tab.length; 说明: 1)根据key获得一个hashValue[注:hashValue=hash(key)&0x7FFFFFFF],然后用hashValue对数组的长度取模得到数组的下标,即:hashValue%length 2)取模法基本能保证元素在哈希表中散列的比较均匀,但是取模会用到除法运算,效率很低。 ------- HashMap获取数组下标的方式:按位与 代码: int hash = hash(key); int i = indexFor(hash, table.length); static int indexFor(int h, int length) { return h & (length-1); } 说明: 1)根据key获得一个hashValue[注:hashValue=hash(key)],然后用hashValue对length-1进行按位与运算得到数组的下标,即:hashValue&(length-1) 2)数组的length必须是2的整数次幂,原因如下: 第一:若length是2的整数次幂,则hashValue&(length-1)等价于hashValue%length,那么hashValue&(length-1)同样也实现了均匀散列,但是(位运算)效率会更高。 1>归纳: 2^1 -1 = 0000 0001 2^2 -1 = 0000 0011 2^3 -1 = 0000 0111 2^n -1 = 0000 (n个1) 2>举例: 若:hashValue=29,length=16 则:hashValue & (length -1) ==> 29 & (2^4-1) ==> 00011101 & 00001111 = 00001101 ==> 13 ==> 0<= hashValue & (length -1) <=length -1 hashValue % length ==> 29 % 16 ==> 13 ==> 0<= hashValue % length <=length -1 故:hashValue & (length -1) == hashValue % length 3>结论:当length=2^n时,hashValue & (length -1) == hashValue % length,且二者的结果范围都是:0到length-1之间的整数。 第二:若length为奇数,则length-1为偶数,偶数(二进制)的最后一位是0,从而导致hashValue&(length-1)的最后一位永远为0, 即:hashValue&(length-1)的结果永远为偶数,最终导致数组中下标为奇数的空间全部被浪费掉。 -------------------------------------------------"HashMap与HashTable的异同点有哪些"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
数组
下标
容量
偶数
方式
运算
异同
不同
安全
代码
内容
奇数
效率
更多
知识
线程
结果
实用
相同
学有所成
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
徐州公司软件开发
就业网络安全
网络安全教育名词解释
网络安全创新实践能力大赛
软件开发过程中的接口分类
魔兽世界里的服务器都是独立的吗
数据库与web技术就业
赣榆小明工作室软件开发怎么样
数据库安全技术包括三个方面
中文版软件开发工具
网络安全审查信息
网络安全工程师的必要性
exce怎样隐藏数据库
vs和数据库相连
数据库的技术是什么
orcle数据库定时备份
模式名是数据库名吗
橡树软件开发官网
ass 数据库
oa软件开发公司联系电话
宣城软件开发培训费用
web服务器怎么填写
商标局数据库开放时间
服务器电信线路
java 从数据库取值
vivo 软件开发工程师
郑州警示教育体验中心软件开发
全球网络安全产业发展指数
ios软件开发论坛
塔科夫怎么开全球服务器