本人大四,以前也开发过几个项目,Map相关集合也总用。但是从来没有研究过底层的实现,只知道杂用。结果在最开始的几次面试中一脸懵逼。认识到不足后,浅显的学习了一下,总结成一下几点。(如果写错了还望指正)

1.HashMap基于Map接口实现,元素以键值对的方式存储,并且允许使用null 建和null值,因为key不能重复,所以只能有一个键为null,另外HashMap不能保证放入元素的顺序,它是无序的,HashMap是线程不安全的。需要同步可以用ConcurrentHashMap和 Collections.synchronizedMap(Map m),推荐使用ConcurrentHashMap,下次会提到它两

2.默认初始化大小16,负载因子0.75

容量是哈希表中桶(Entry数组)的数量,初始容量知识哈希表在创建时的容量。加载因子是哈希表在其容量自动增加之前可以达到多满的一种尺度。当哈希表中的条目数超出了加载因子与当前你容量的乘积时,通过rehash方法将容量翻倍。

3

aaarticlea/png;base64,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" alt="" />

HashMap采用Entry数组来存储key-value对,每一个键值对组成了一个Entry实体,Entry类实际上是一个单向的链表结构,它具有Next指针,可以连接下一个Entry实体,依次来解决Hash冲突的问题,因为HashMap是按照Key的hash值来计算Entry在HashMap中存储的位置的,如果hash值相同,而key内容不相等,那么就用链表来解决这种hash冲突
(注:JDK1.8 当链表长度大于8,转化为红黑树存储)
4.hash碰撞:两个对象的key的hashcode是一样的
(1)if碰撞 如何get value?
通过equals遍历table那个位置上面的Entry链表
(2)我当初理解时候就是在网上看见了这张图片(时间有点长,当初就保存了,都忘在哪篇博客看到的了,勿怪),分享给大家


几次面试后才弄懂的HashMap的更多相关文章

  1. 面试前需要弄懂的SQL

    说明:创建数据库 view source   print? 1 Create DATABASE database-name 说明:删除数据库 view source   print? 1 drop d ...

  2. 2018前端面试总结,看完弄懂,工资少说加3K | 掘金技术征文

    2018前端面试总结,看完弄懂,工资少说加3K | 掘金技术征文:https://juejin.im/post/5b94d8965188255c5a0cdc02

  3. 彻底弄懂 JavaScript 执行机制

    本文的目的就是要保证你彻底弄懂javascript的执行机制,如果读完本文还不懂,可以揍我. 不论你是javascript新手还是老鸟,不论是面试求职,还是日常开发工作,我们经常会遇到这样的情况:给定 ...

  4. 这一次,彻底弄懂 JavaScript 执行机制

    本文转自https://juejin.im/post/59e85eebf265da430d571f89#heading-4 本文的目的就是要保证你彻底弄懂javascript的执行机制,如果读完本文还 ...

  5. SQL Server-聚焦NOLOCK、UPDLOCK、HOLDLOCK、READPAST你弄懂多少?(三十四)

    前言 时间流逝比较快,博主也在快马加鞭学习SQL Server,下班回来再晚也不忘记更新下博客,时间挤挤总会有的,现在的努力求的是未来所谓的安稳,每学一门为的是深度而不是广度,求的是知识自成体系而不是 ...

  6. 彻底弄懂JS的事件冒泡和事件捕获(不推荐阅读)

    由于搬去敌台了,好久没来博客园,今天无意中翻到有“误认子弟”的评论,这里特意做个说明. 本文中关于事件冒泡和事件捕获的描述和例子都是OK的,错就错在后面用jquery去展示了利用事件冒泡的例子有误,其 ...

  7. 一文弄懂神经网络中的反向传播法——BackPropagation【转】

    本文转载自:https://www.cnblogs.com/charlotte77/p/5629865.html 一文弄懂神经网络中的反向传播法——BackPropagation   最近在看深度学习 ...

  8. [转]js模块化编程之彻底弄懂CommonJS和AMD/CMD!

    原文: https://www.cnblogs.com/chenguangliang/p/5856701.html ------------------------------------------ ...

  9. [转帖]彻底弄懂UTF-8、Unicode、宽字符、locale

    彻底弄懂UTF-8.Unicode.宽字符.locale linux后端开发   已关注   彻底弄懂UTF-.Unicode.宽字符.locale unicode 是字符集 utf-8是编码格式.. ...

随机推荐

  1. MYSQL:RELPACE用法

    RELPACE类似于INSERT的方法,但如果表中的旧行与主键或惟一索引的新行具有相同的值,则在插入新行之前删除旧行 为了测试方便我们首先要创建一张表 CREATE TABLE test ( id I ...

  2. mybatis注解开发,动态sql

    在利用mybatis注解开始时,如果没有用到动态sql时,可以直接写 @Select("select * from order") List<XlSubOrder> g ...

  3. pm am 12小时格式化

    <div id="m_tiem">PM 14:26</div> tiem('m_tiem'); //pm am 12小时格式化function tiem(i ...

  4. bzoj:1575: [Usaco2009 Jan]气象牛Baric

    Description 为了研究农场的气候,Betsy帮助农夫John做了N(1 <= N <= 100)次气压测量并按顺序记录了结果M_1...M_N(1 <= M_i <= ...

  5. bzoj:1661 [Usaco2006 Nov]Big Square 巨大正方形

    Description 农民 John 的牛参加了一次和农民 Bob 的牛的竞赛.他们在区域中画了一个N*N 的正方形点阵,两个农场的牛各自占据了一些点.当然不能有两头牛处于同一个点.农场的目标是用自 ...

  6. HDU 1159 Common Subsequence【dp+最长公共子序列】

    Common Subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  7. hdu_1698Just a Hook(线段树)

    hdu_1698Just a Hook(线段树) 标签: 线段树 题目链接 题意: 一个英雄的技能是发射一个长度为n的金属链,初始的金属链都是铁做的,标记为1,我们可以对于某个区间修改它的金属材质,如 ...

  8. linux基本命令学习02

    =============================================================================a.txtc:\abc\a.txt windo ...

  9. 解决JSONObject.fromObject数字为null时被转换为0

    在使用JSONObject.fromObject的时候会遇到一种情况就是当对象的某一个Double型或Integer型的属性为空的时候,转JSON的时候会变成0.当一个布尔型的属性为空的时候,转JSO ...

  10. Java应用开发中的字符集与字符编码

    事出有因 在向HttpURLConnection的输出流写入内容时,因没有设置charset,导致接收方对数据的验签不一致. URL url = new URL(requestUrl); //打开连接 ...