深入理解HashMap底层原理剖析(JDK1.8)

论坛 期权论坛     
选择匿名的用户   2021-6-2 17:35   390   0
<p style="margin-left:0px;"><span style="color:#363636;">接下来会从以下几个方面介绍 HashMap 源码相关知识:</span></p>
<p style="margin-left:0px;"><span style="color:#363636;">  1、HashMap 存储结构</span></p>
<p style="margin-left:0px;"><span style="color:#363636;">  2、HashMap 各常量、成员变量作用</span></p>
<p style="margin-left:0px;"><span style="color:#363636;">  3、HashMap 几种构造方法</span></p>
<p style="margin-left:0px;"><span style="color:#363636;">  4、HashMap put 及其相关方法</span></p>
<p style="margin-left:0px;"><span style="color:#363636;">  5、HashMap get 及其相关方法</span></p>
<p style="margin-left:0px;"><span style="color:#363636;">  6、HashMap remove 及其相关方法</span></p>
<p style="margin-left:0px;"><span style="color:#363636;">  7、HashMap 扩容方法 resize()</span></p>
<p style="margin-left:0px;"><span style="color:#363636;">  介绍方法时会包含方法实现相关细节。</span></p>
<p style="margin-left:0px;"><span style="color:#363636;">  先来看一下 HashMap 的继承图:</span></p>
<p style="margin-left:0px;"><span style="color:#363636;">  <img alt="" class="zoom" height="445" id="aimg_xIj19" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-1e698c1e48d4a1a7f225ff129cd8b957" width="720"></span></p>
<p style="margin-left:0px;"><span style="color:#363636;">HashMap 根据键的 hashCode 值存储数据,大多数情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历顺序却是不确定的。 HashMap 最多只允许一条记录的键为 null ,允许多条记录的值为 null 。HashMap 非线程安全,即任一时刻可以有多个线程同时写 HashMap,可能会导致数据的不一致。如果需要满足线程安全,可以用 Collections的synchronizedMap 方法使 HashMap 具有线程安全的能力,或者使用ConcurrentHashMap。</span></p>
<p style="margin-left:0px;"><span style="color:#363636;">一、HashMap 存储结构</span></p>
<p style="margin-left:0px;"><span style="color:#363636;">  HashMap是数组&#43;链表&#43;红黑树(JDK1.8增加了红黑树部分)实现的,如下图所示:</span></p>
<p style="margin-left:0px;"><span style="color:#363636;">  <img alt="" class="zoom" height="543" id="aimg_Tbqys" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-2c0c4bf49c5eff97433e0805e48934f5" width="720"></span></p>
<p style="margin-left:0px;"><span style="color:#363636;"> 源码中具体实现如下:  </span></p>
<div style="margin-left:0px;">
<div style="margin-left:0px;">
  <span style="color:#363636;">[Java] <em>纯文本查看</em> <em>复制代码</em></span>
</div>
<div style="margin-left:0px;">
  <div id="highlighter_870903" style="margin-left:0px;">
   <div style="margin-left:0px;">
    <span style="color:#363636;"><span style="color:#FFFFFF;"><a class="toolbar_item command_help help" href="http://bbs.itheima.com/#">?</a></span></span>
   </div>
   <table cellspacing="0" style="width:700px;"><tbody><tr><td style="text-align:left;vertical-align:baseline;">
       <div style="margin-left:0px;">
        <span style="color:#363636;"><span style="color:#afafaf;">01</span></span>
       </div>
       <div style="margin-left:0px;">
        <span style="color:#363636;"><span style="color:#afafaf;">02</span></span>
       </div>
       <div style="margin-left:0px;">
        <span style="color:#363636;"><span style="color:#afafaf;">03</span></span>
       </div>
       <div style="margin-left:0px;">
        <span style="color:#363636;"><span style="color:#afafaf;">04</span></span>
       </div>
       <div style="margin-left:0px;">
        <span style="color:#363636;"><span style="color:#afafaf;">05</span></span>
       </div>
       <div style="margin-left:0px;">
        <span style="color:#363636;"><span style="color:#afafaf;">06</span></span>
       </div>
       <div style="margin-left:0px;">
        <span style="color:#363636;"><span style="color:#afafaf;">07</span></span>
       </div>
       <div style="margin-left:0px;">
        <span style="color:#363636;"><span style="color:#afafaf;">08</span></span>
       </div>
       <div style="margin-left:0px;">
        <span style="color:#363636;"><span style="color:#afafaf;">09</span></span>
       </div>
       <div style="margin-left:0px;">
        <span style="color:#363636;"><span style="color:#afafaf;">10</span></span>
       </div>
       <div style="margin-left:0px;">
        <span style="color:#363636;"><span style="color:#afafaf;">11</span></span>
       </div>
       <div style="margin-left:0px;">
        <span style="color:#363636;"><span style="color:#afafaf;">12</span></span>
       </div>
       <div style="margin-left:0px;">
        <span style="color:#363636;"><span style="color:#afafaf;">13</span></span>
       </div>
       <div style="margin-left:0px;">
        <span style="color:#363636;"><span style="color:#afafaf;">14</span></span>
       </div>
       <div style="margin-left:0px;">
        <span style="color:#363636;"><span style="color:#afafaf;">15</span></span>
       </div>
       <div style="margin-left:0px;">
        <span style="color:#363636;"><span style="color:#afafaf;">16</span></span>
       </div>
       <div style="margin-le
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP