HashMap和Hashtable的详细比较

前言:
可以直接根据hashcode值判断两个对象是否相等吗?肯定是不可以的,因为不同的对象可能会生成相同的hashcode值。虽然不能根据hashcode值判断两个对象是否相等,但是可以直接根据hashcode值判断两个对象不等,如果两个对象的hashcode值不等,则必定是两个不同的对象。如果要判断两个对象是否真正相等,必须通过equals方法。
也就是说对于两个对象,如果调用equals方法得到的结果为true,则两个对象的hashcode值必定相等;如果equals方法得到的结果为false,则两个对象的hashcode值不一定不同;如果两个对象的hashcode值不等,则equals方法得到的结果必定为false;如果两个对象的hashcode值相等,则equals方法得到的结果未知。
HashMap和Hashtable不保证map的顺序,也不保证顺序不会随着时间不变。
HashMap实例有两个参数影响性能:初始capacity和load factor。capacity是hashtable中桶的数量,初始capacity就是hashtable创建时的capacity。load factor影响hashtable多满时允许自动增加capacity。当hashtable中entry的数量超过load factor和当前capacity的乘积,hashtable会重新哈希(意味着,内部数据结构重建)因此hashtable大约拥有桶数量的两倍。
作为通用规则,默认load factor(0.75)在时间和空间消耗上提供了好的权衡。值越大,空间开销越小,但是遍历成本增加(表现在大多数操作,包括get和put)。当设置初始capacity时,为了最小化重新hash的操作次数,应该考虑map的entry数量和load factor。如果初始容量大于最大entry数量除以load factor,重新hash操作将不会发生。然而,设置初始capacity太大会浪费空间。
如果许多mapping存储在HashMap实例中,创建时使用足够大的capacity将允许mapping存储得更有效率,因为不会随着table的数量增大重新hash。注意使用许多相同hashCode()的key肯定会降低任意hashtable的性能。
二.相同点
|
DEFAULT_LOAD_FACTOR |
0.75 |
|
TREEIFY_THRESHOLD |
8 |
|
UNTREEIFY_THRESHOLD |
6 |
|
MIN_TREEIFY_CAPACITY 否则resize() |
64 |
|
size |
mapping数量 |
|
threhold |
capacity*load factor |
三.不同点
|
|
Hashtable |
|
|
线程安全 |
不安全 |
安全 |
|
允许null的键和值 |
允许 |
不允许 |
|
实现和继承 |
实现Map |
实现Map,继承Dictionary |
|
遍历方式 |
Iterator |
Iterator和Enumeration |
|
计算哈希值 |
(key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16) |
(key.hashCode() & 0x7FFFFFFF) |
|
计算数组下标 |
(length - 1) & hash |
hash % length |
|
DEFAULT_INITIAL_CAPACITY |
16 |
11 |
|
容量增加方式 |
old*2 长度始终为2的幂 |
old*2+1 |
|
构造函数 |
threshold=tableSizeFor(initialCapacity) |
threhold=initialCapacity*load factor |
|
resize |
从0-cap 链表顺序不变 |
从cap-0 链表顺序相反 |
计算数组下标:当length总是2的n次方时,h&(length-1)运算等价于对length取模,也就是h%length,但是&比%具有更高的效率。
容量增加方式:当数组长度为2的n次幂的时候,不同的key算得的index相同的几率较小,那么数据在数组上分布就比较均匀,也就是说碰撞的几率小。相对的,查询的时候就不用遍历某个位置上的链表,这样查询效率也就较高了。导致resize()不同HashMap直接使用之前的数组下表,而Hashtable需要重新计算。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# HashMap和Hashtable的同和不同
# HashMap和Hashtable比较
# java HashMap和HashTable的区别详解
# java面试题——详解HashMap和Hashtable 的区别
# HashMap 和 Hashtable的区别
# Java中Hashtable类与HashMap类的区别详解
# Java中HashMap和Hashtable的区别浅析
# Java中HashMap和Hashtable及HashSet的区别
# 浅析Java中Map与HashMap
# Hashtable
# HashSet的区别
# 浅析java中ArrayList与Vector的区别以及HashMap与Hashtable的区别
# java中Hashtable和HashMap的区别分析
# HashMap和HashTable底层原理以及常见面试题
# 遍历
# 可以直接
# 链表
# 也就是说
# 也不
# 也就
# 不可以
# 数据结构
# 希望能
# 更高
# 更有
# 越大
# 较小
# 谢谢大家
# 高了
# 两倍
# 不安全
# 下表
# 越小
# 长度为
相关文章:
网站制作费用多少钱,一个网站的运营,需要哪些费用?
独立制作一个网站多少钱,建立网站需要花多少钱?
如何在云指建站中生成FTP站点?
巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成
网站制作说明怎么写,简述网页设计的流程并说明原因?
安徽网站建设与外贸建站服务专业定制方案
免费ppt制作网站,有没有值得推荐的免费PPT网站?
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
建站上传速度慢?如何优化加速网站加载效率?
如何在阿里云ECS服务器部署织梦CMS网站?
长沙做网站要多少钱,长沙国安网络怎么样?
安云自助建站系统如何快速提升SEO排名?
Python路径拼接规范_跨平台处理说明【指导】
建站之星安全性能如何?防护体系能否抵御黑客入侵?
php8.4新语法match怎么用_php8.4match表达式替代switch【方法】
如何通过FTP空间快速搭建安全高效网站?
,交易猫的商品怎么发布到网站上去?
小建面朝正北,A点实际方位是否存在偏差?
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
攀枝花网站建设,攀枝花营业执照网上怎么年审?
零服务器AI建站解决方案:快速部署与云端平台低成本实践
微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?
电脑免费海报制作网站推荐,招聘海报哪个网站多?
网站制作大概多少钱一个,做一个平台网站大概多少钱?
如何在IIS中配置站点IP、端口及主机头?
详解jQuery停止动画——stop()方法的使用
定制建站平台哪家好?企业官网搭建与快速建站方案推荐
如何在七牛云存储上搭建网站并设置自定义域名?
如何通过商城免费建站系统源码自定义网站主题?
Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解
深圳网站制作案例,网页的相关名词有哪些?
青浦网站制作公司有哪些,苹果官网发货地是哪里?
建站之星后台搭建步骤解析:模板选择与产品管理实操指南
香港服务器网站卡顿?如何解决网络延迟与负载问题?
如何快速生成ASP一键建站模板并优化安全性?
SQL查询语句优化的实用方法总结
,如何利用word制作宣传手册?
在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?
济南网站建设制作公司,室内设计网站一般都有哪些功能?
新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
岳西云建站教程与模板下载_一站式快速建站系统操作指南
已有域名和空间如何快速搭建网站?
如何选择高效稳定的ISP建站解决方案?
如何在Golang中使用encoding/gob序列化对象_存储和传输数据
,巨量百应是干嘛的?
广州商城建站系统开发成本与周期如何控制?
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
江苏网站制作公司有哪些,江苏书法考级官方网站?
建站之星后台管理系统如何操作?
*请认真填写需求信息,我们会在24小时内与您取得联系。