HashMap基本原理

1、首先说一下数组结构,数组的存储区间是连续的,空间的复杂度比较大,所以会比较占用内存。

     但寻址比较快,所以特点是:查询快速、操作困难。

2、再说一下链表结构,链表存储结构比较离散,空间的复杂度比较小,所以内存占用比较宽松。

     但寻址比较麻烦,所以特点是:查询较慢、操作简单。

这两种存储结构是比较典型的两个极端,这时哈希表可以同时弥补他们的缺点。我们可以理解哈希表为:

把链表存储到数组中(数组+链表)

不爱画了,盗用一张网上的图片,哈哈 :

HashMap里面实现了一个静态内部类Entry,属性有 key , value和next,  哈希表每个元素存储的是链表的头结点。这些元素存储到数组中的规则一般是通过 hash(key)%len(元素的key的哈希值对数组长度取模) 定位。比如此哈希表中,10%12=10, 23%12=10。所以10和23都存储在数组下标为10的位置。

对第一个键值对A的存储,通过计算key的hash得到index=10,所以Entry[10] = A。对第二个键值对B的存储,通过计算B的index也等于10。HashMap操作是:B.next = A,Entry[10] = B。以此类推,这样我们会看到index=10的地方其实存取了A、B两个键值对,他们通过next链接在一起。也就是说数组中存储的是最后插入的元素,这就是HashMap的大致实现。

 

转载于:https://my.oschina.net/MinghanSui/blog/1506058

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值