hashmap数据结构详解(一)之基础知识奠基

 

hashmap数据结构详解(一)之基础知识奠基

hashmap数据结构详解(二)之走进JDK源码

hashmap数据结构详解(三)之hashcode实例及大小是2的幂次方解释

hashmap数据结构详解(四)之hashmap过程综述

hashmap数据结构详解(五)之HashMap、HashTable、ConcurrentHashMap 的区别

 


(笔者在写项目的时候发现在hashmap的使用中会出现各种bug,还有hashmap的大小是有限的,故彻底理解一下)

【map】

map的形式是“键值对key-value”。

如果有学过《数据结构与算法分析》的话,hash的汉语意思是“散列”。

JDK 1.6及以:hashmap其实是数组+链表的形式。

JDK 1.8:数组+链表+红黑树

(关于红黑树:平衡二叉B树的内容,以后有时间的话再补吧。hashmap中当链表后面元素超过8的时,会创建成为一个红黑树)

 

见下图:

以上其实也就是Java中常称的“拉链法”,还是蛮形象的。

 

【hash】

绿色部分是数组形式,黄色部分是链表。假设现在有很多数字(或者地址)

4545,4546,7879,1315,4546,7879,4566,2356,,4456,7896,3569,7897,7879,5654,46789,等等数字。

散列分为两种:闭散列、开散列。

 

开散列:

下面进行以下操作:将上述数字放入该结构中,按照某种散列函数去进行放置。绿色部分是0—9的序号。第一次探测的时候,该序号没有放,则直接放入。如果已经有了,那么就加在后面的链表中。

        

闭散列:

将0-9个绿色空间分成2个桶(或其他数目)。外加一个溢出桶。根据探测函数将上述数字分别放入两个桶中,桶中溢出后则,则将相应的放入溢出桶中。

       

 

---------------------------------------------------------------------------

--------------------------2018/7/18   修改---------------------------

在基槽之后的链表存储中,hashmap存的是节点形式的值(一个类或者一个结构体的性质)

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值