没有合适的资源?快使用搜索试试~ 我知道了~
HashMap详解和使用示例_动力节点Java学院整理
需积分: 0 10 下载量 181 浏览量
2017-10-25
16:43:12
上传
评论 3
收藏 847KB DOC 举报
温馨提示
HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。 HashMap 继承于AbstractMap,实现了Map、Cloneable、java.io.Serializable接口。 HashMap 的实现不是同步的,这意味着它不是线程安全的。它的key、value都可以为null。此外,HashMap中的映射不是有序的。
资源推荐
资源详情
资源评论
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![java](https://img-home.csdnimg.cn/images/20210720083646.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![h](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/release/download_crawler_static/10039226/bg1.jpg)
详解和使用示例动力节点 学院整理
第 部 分 介 绍
HashMap 简介
是一个散列表,它存储的内容是键值对映射。
继承于 ,实现了 、、 接口。
的实现不是同步的,这意味着它不是线程安全的。它的 、 都可以为 。此外, 中的映射
不是有序的。
的实例有两个参数影响其性能:“初始容量” 和 “加载因子”。容量 是哈希表中桶的数量,初始容量 只是哈希
表在创建时的容量。加载因子 是哈希表在其容量自动增加之前可以达到多满的一种尺度。当哈希表中的条目数超出了加载
因子与当前容量的乘积时,则要对该哈希表进行 操作(即重建内部数据结构),从而哈希表将具有大约两倍的桶数。
通常,默认加载因子是 0.75!这是在时间和空间成本上寻求一种折衷。加载因子过高虽然减少了空间开销,但同时也增加
了查询成本(在大多数 类的操作中,包括 "和 操作,都反映了这一点)。在设置初始容量时应该考虑到
映射中所需的条目数及其加载因子,以便最大限度地减少 操作次数。如果初始容量大于最大条目数除以加载因子,
则不会发生 操作。
#
HashMap 的构造函数
共有 4 个构造函数!如下:
$$默认构造函数。
$$指定“容量大小”的构造函数
$$指定“容量大小”和“加载因子”的构造函数
!%&'
$$包含“子 (的构造函数
)*+&,!*+&-./
#
1 / 46
![](https://csdnimg.cn/release/download_crawler_static/10039226/bg2.jpg)
HashMap 的 API
&
0
,0
-0
)1),!-..
-"0
1/
),.
-,!-
&)*+&,!*+&-./
-/0
)-.
#
第 2 部 分 数 据 结 构
HashMap 的继承关系
"0
3),!-.
3),!-.
),!-.
+&),!-.
//),!-.!! 45
#
HashMap 与 Map 关系如下图:
2 / 46
![](https://csdnimg.cn/release/download_crawler_static/10039226/bg3.jpg)
从图中可以看
出:
6
继
承于
类,实现了
接口。
是7
键值
对7接口,
实现了7键值
对7的通用函数
接口。
62
是
通过7拉链
法7实现的哈希
表。它包括几
个重要的成员
变量:
!# !#
&!#&'!#/&。
是一个 189数组类型,而 1 实际上就是一个单向链表。哈希表的7 键值对7都是存储在 1
数组中的。
是 的大小,它是 保存的键值对的数量。
& 是 的阈值,用于判断是否需要调整 的容量。& 的值:7容量;加载因子7,当
中存储数据的数量达到 & 时,就需要将 的容量加倍。
&' 就是加载因子。
/& 是用来实现 << 机制的。
#
第 = 部 分 源 码 解 析 基 于 > , ? 6 @ A
为了更了解 的原理,下面对 源码代码作出分析。
在阅读源码时,建议参考后面的说明来建立对 HashMap 的整体认识,这样更容易理解 。
3 / 46
![](https://csdnimg.cn/release/download_crawler_static/10039226/bg4.jpg)
"B
2/;B
=
@),!-.
A+&),!-.
?//),!-.!!
C4
D
E$$默认的初始容量是 ?,必须是 2 的幂。
6F>1'GHIJKJIJHLJIM:?B
2$$最大容量(必须是 2 的幂且小于 2 的 =6 次方,传入容量过大将被这个值替换)
=FNJGLJIM:))=6B
@
A$$默认加载因子
?F%>1'GHIH0>'I0O:6CA<B
C
D$$存储数据的 1 数组,长度是 2 的幂。
E$$ 是采用拉链法实现的,每一个 1 本质上是一个单向链表
26189B
2
22$$ 的大小,它是 保存的键值对的数量
2= B
2@
2A$$ 的阈值,用于判断是否需要调整 的容量(&:容量;加载因子)
2?&B
2C
2D$$加载因子实际大小
2EF%&'B
=6
=$$ 被改变的次数
=2/&B
==
=@$$指定“容量大小”和“加载因子”的构造函数
=A!%&'4
4 / 46
![](https://csdnimg.cn/release/download_crawler_static/10039226/bg5.jpg)
=?<)6
=CPPJ""/1+7J"Q7R
=DB
=E$$ 的最大容量只能是 NJGLJIM
@6<.NJGLJIM
@:NJGLJIMB
@2<&'):6SS'KK&'
@=PPJ""/1+7J"&<Q7R
@@&'B
@A
@?$$找出“大于 (的最小的 2 的幂
@C:B
@DP)
@E)):B
A6
A$$设置“加载因子”
A2&':&'B
A=$$设置“ 阈值”,当 中存储数据的数量达到 & 时,就需要将 的容量加倍。
A@&:;&'B
AA$$创建 1 数组,用来保存数据
A?:P189B
ACB
AD5
AE
?6
?$$指定“容量大小”的构造函数
?24
?=!>1'GHIH0>'I0OB
?@5
?A
??$$默认构造函数。
?C4
?D$$设置“加载因子”
?E&':>1'GHIH0>'I0OB
C6$$设置“ 阈值”,当 中存储数据的数量达到 & 时,就需要将 的容量加倍。
C&:>1'GHIJKJIJHLJIM;>1'GHIH0>'I0OB
C2$$创建 1 数组,用来保存数据
5 / 46
剩余45页未读,继续阅读
资源评论
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
![avatar](https://profile-avatar.csdnimg.cn/d0497d2f0b674069bd18ea34c5040795_f5465245.jpg!1)
牛仔码农@
- 粉丝: 205
- 资源: 122
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)