hashMap的数据结构

《hashMap的数据结构》

在jdk8中,HashMap是用了数组和链表以及红黑树这三种数据结构

首先,在hashmap类中,都有一个table数组,我们在存储数据时,对这个数据的hash值进行一系列的计算 计算出它在Table中的位置(下标),并将它存放进去
然而,我们在hashmap是什么 中提到,不同的对象的Hash值可能相同,那么相同的Hash值会导致不同的数据在数组中有相同的存储位置,我们虽然创造了一系列的解决办法,但并不能完全的避免这种冲突,那么,当产生冲突时,hashmap是怎样解决的呢?
当产生冲突时,如data1和data2 ,我们把data2放在data1后的列表中,这样就不会因为哈希值的冲突而对数据产生影响。
1.时间复杂度
我们知道,当某条链表的长度大于8时,就会将其转换为红黑树。遍历一条链表的时间复杂度O(n),当一条链表过长时,遍历这条链表可能会花很长时间,而遍历一颗红黑树的时间复杂度为O(logn),从而减少了插入或查找的时间
2.红黑树
简单总结下红黑树是什么:一种二叉查找树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。

也就是说,红黑树是一种相对平衡的查找二叉树,这使他不仅便于查找,也便于插入和删除,这对于既需要插入也需要查找的HashMap是非常有利的

下一节:数据哈希值的计算和在table中的存储位置

    原文作者:算法小白
    原文地址: https://segmentfault.com/a/1190000009318238
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞