HashMap与HashTable的异同点有哪些
发表于:2024-10-06 作者:千家信息网编辑
千家信息网最后更新 2024年10月06日,本篇内容介绍了"HashMap与HashTable的异同点有哪些"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够
千家信息网最后更新 2024年10月06日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安全错误
数据库的锁怎样保障安全
国家网络安全宣传周比赛
连接sql数据库
主流的软件开发技术线
服务器域用户名
深圳网络安全部门
宿州服务器机箱加工
怎样才能知道软件开发者窃取
高中网络技术应用会考c级
晋州软件开发培训教学哪家好
网络安全 全员 培训
电脑什么是远程服务器
文件夹上传至数据库
数据库 base64图片
玉林市app软件开发多少钱
给我打开网络安全提示图片
内网网络安全人为
廊坊燕郊软件开发招聘信息
hpe服务器报修电话
软件开发平台及设计流程图
数据库中触发器存储过程
艾克信控实时数据库
查看数据库表明
写入mysql数据库乱码
饭圈乱象 网络安全
云数据库读写分离的主要作用是
boss服务器挂了
oracle数据库查询楼栋
普法进行时之网络安全法
tcga数据库如何分析
网络安全是非传统安全问题