HashMap和Hashtable的详细比较
发布时间 - 2026-01-11 00:54:24 点击率:次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底层原理以及常见面试题
# 遍历
# 可以直接
# 链表
# 也就是说
# 也不
# 也就
# 不可以
# 数据结构
# 希望能
# 更高
# 更有
# 越大
# 较小
# 谢谢大家
# 高了
# 两倍
# 不安全
# 下表
# 越小
# 长度为
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
深圳网站制作培训,深圳哪些招聘网站比较好?
Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程
Laravel怎么上传文件_Laravel图片上传及存储配置
Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践
个人网站制作流程图片大全,个人网站如何注销?
5种Android数据存储方式汇总
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
Laravel怎么实现微信登录_Laravel Socialite第三方登录集成
香港网站服务器数量如何影响SEO优化效果?
在线制作视频的网站有哪些,电脑如何制作视频短片?
Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置
Laravel事件监听器怎么写_Laravel Event和Listener使用教程
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
个人摄影网站制作流程,摄影爱好者都去什么网站?
如何快速生成橙子建站落地页链接?
北京的网站制作公司有哪些,哪个视频网站最好?
如何快速生成ASP一键建站模板并优化安全性?
中国移动官方网站首页入口 中国移动官网网页登录
在线制作视频网站免费,都有哪些好的动漫网站?
千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
Bootstrap整体框架之CSS12栅格系统
Windows10如何更改计算机工作组_Win10系统属性修改Workgroup
Laravel如何使用Livewire构建动态组件?(入门代码)
javascript基本数据类型及类型检测常用方法小结
用yum安装MySQLdb模块的步骤方法
如何破解联通资金短缺导致的基站建设难题?
Laravel如何实现API资源集合?(Resource Collection教程)
如何在IIS中新建站点并解决端口绑定冲突?
微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】
如何用低价快速搭建高质量网站?
桂林网站制作公司有哪些,桂林马拉松怎么报名?
Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】
Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】
Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践
Linux网络带宽限制_tc配置实践解析【教程】
为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】
百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏
Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践
如何在IIS服务器上快速部署高效网站?
QQ浏览器网页版登录入口 个人中心在线进入
通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】
详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
如何基于云服务器快速搭建个人网站?
Laravel如何实现密码重置功能_Laravel密码找回与重置流程
如何有效防御Web建站篡改攻击?
Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】

