浅谈hashmap

穿精又带淫゛_ 提交于 2020-01-30 01:14:52

Hashmap组成
Hashmap大概由两部分组成,第一部分是:数组;第二部分是:链表或者红黑树(在jdk1.8以后当一支链表的长度超过8以后,链表要转化为红黑树),emmm大概长成这样子:
在这里插入图片描述
如何构建一个Hashmap?

  1. 构建一个Hashmap我们得先确定一个散列函数(下图菱形中的X%6就是一个简单地散列函数[自己定义不唯一])
  2. 然后让数据根据散列函数运算得到对应的散列值,找到它在数组中对应的位置
  3. 将数据放入数组对应的链表/红黑树中(放在红黑树的头部比较方便)
  4. 散列碰撞:如下图圈出来的情况—>不同的值经过散列函数后进入了同一个链表中的现象
  5. 重(chong)Hash:我们确定每个链表/红黑树中的数据量是相同的(比如30个),当一棵树中的数据超过30时,将数组的size翻倍,然后打乱所有的数据,重新根据散列函数分配数据
  6. 数据倾斜:当散列过程中,大量的数据都被配往一棵后者几棵树中,这种数据分配不平衡的现象较数据倾斜(所以散列函数要搞的复杂一点,尽量能使数据发散的分配到所有的树中)
    在这里插入图片描述时间复杂度
    因为数组的长度和链表的长度是一个常数,在插入/查找数据时所进行的步骤都为小于这个最大的常数,所以Hashmap的查找和插入的是将复杂度都为O(1)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!