因为不同的 key 完全可能有相同的 hashcode 值,当然也完全可能在数组中有相同的目标 index。比如,要新添加一个元素 Entry5(k5,v5),对 k5 进行运算得到的目标 index 为4。
但是因为数组中对应位置已有一个元素 Entry4, 我们清楚一个数组的同一个索引处不可能连续存储两个元素而不被覆 盖,所以这时会怎么处理呢?
这时链表就派上用场了,将这两个元素在 index 为 4 处构成一个 链表即可以完美的解决冲突问题。
但是要注意,jdk1.7 采用的是头插 法。就是将新节点 Entry5 放在数组中作为链表的头节点,将原来的 Entry4 移出作为其 next 节点。如下图所示:
1、前言
HashMap 是 java工程师最常用的数据结构之一,但是能对其原理掌握的比较深的同学很少。尤其是本文的主题,据一些常年负责招 聘的朋友介绍。
HashMap 的死循环是面试中的常见问题,但是能讲清楚的面试者很少,即使这些应聘者工作时间都比较长。
原因是,目前讲解这个问题的文章虽多,但好文章却不多。
也有些文章讲解的很完善,但内容太过烧脑,所以看下来基本上都云里雾 里。鉴于目前的情况,本文基于我个人对源码熟练掌握的基础上,跳出源码,因为那太烧脑,提炼出核心环节。尽量一步一图,以大白话 形式将底层原理呈现出来。本文的理论基础是基于 jdk1.8 以下版本。死循环问题也主要存在 于 jdk1.8 以下的版本中。
2、HashMap 的数据结构
jdk1.7 版本的HashMap,底层结构是一个数组,数组中的每项都可以是个链表,开始时我们用数组保存元素,当添加元素遇到冲突,即相同位置处有多个元素时,就将这些元素添加到对应的链表 中,所以 HashMap 的底层结构可以认为是由数组和链表构成。
如果,你在构建一个 HashMap 时不指定数组大小,那么默认情况下,数组大小为 16,但限于篇幅。
下面我们只画了一个大小为 8 的 数组数组,在索引为 2 处有个链表,存放着 3 个元素,分别为 Entry1、Entry2、Entry3。这三个元素的 hash 运算结果是一样的而 且都为 2,所以在数组的 index=2 构成了一条链表。
本报记者梳理发现,今年3月12日,比特币在当日24小时内出现巨幅下跌,全球市场比特币期货合约爆仓总金额32.8亿美元,约合229亿元人民币,爆仓人数超11万人。而根据海外一家交易所在12月14日发布的数据显示,截至目前,在加密数字货币市场参与现货交易用户有75%亏钱概率,期货合约用户则超过90%亏钱概率。
“并非只有加密数字货币价格剧烈波动的时候会出现大规模的期货合约市场爆仓情形。以比特币为例,由于其价格已经达到历史峰值,即使在某一个交易日内,比特币价格振幅超过200美元,就有可能使得期货合约市场的投资人爆仓,因为比特币整个价格区间实在太宽泛,且没有单日涨跌幅限制。”对此,王恒分析称。
比特币已“高处不胜寒”
在加密数字货币市场不成熟的交易环境中,只有极少部分人是“赢家”,而大部分参与者则是“输家”。事实上,比特币在年内涨幅接近5倍,又引起投资者极大地关注。
“太多人看好比特币在2021年的走势,认为突破2万美元在明年一季度就会实现。在期货合约市场近期投资人也显得特别亢奋,准备加注比特币会在未来三个月内达到21000美元上方;另有保守的投资者则开了三个月期货合约看空账户,赌其三个月内会下跌到1.9万美元下方。”12月16日,上海一位炒币人士肖杰(化名)向本报记者透露。
肖杰也承认,不论比特币价格未来作何方向性选择,参与期货合约交易的风险随时都有,在没有大型机构参与的情况下,个人最好不好参与加密数字货币的期货交易。
不过值得关注的是,就在近期,普华永道发布的一份报告显示,在整个2020年越来越多的机构“玩家”进入了加密货币市场,包括摩根大通(JPMorgan)、渣打银行(Standard Chartered)、花旗集团(Citi Group)、德意志银行(Deutsche Bank)、星展银行集团等,而这些机构的假如将使得比特币等一众主流加密数字货币的波动不会像此前那么大,许多机构甚至开始定期承保这一资产类别。
“随着许多银行开始公开他们的加密资产计划,我们可以预计到2021年这一趋势将会加速。这将进一步促进传统买方公司的进入,这些公司不仅更愿意与这种受监管的中介机构进行交易,而且在许多情况下,由于自身的监管或投资者限制,它们有义务进行交易。尽管迄今为止投资银行是加密行业最活跃的参与者,但我们应该密切关注私人银行。多数大型私人银行曾经忽视比特币, 我们预计,一些前瞻性的私人银行将视提供加密资产为其竞争利器,推动高净值和家庭财富办公室等客户基础加入这个行业。”普华永道合伙人、香港大学教授Henry在这份报告中指出。
(编辑:济南站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|