简述哈希表

目录

一.哈希值

二.哈希表的结构

三.哈希表的优点

四.哈希表不允许存储重复元素的原理


一.哈希值

    Object父类为我们提供了计算哈希值的方法,源码如下:

        

     native关键字修饰的方法没有方法体,会去调用底层库来实现功能。

     哈希值的计算利用的内存地址。

     如果我们想要实现自定义的哈希值算法可以通过覆盖重写Object的hashCode方法

二.哈希表的结构

        哈希表由数组+链表或者数组+链表+红黑树组成

这张图片是数组加链表的形式,如果想要引入红黑树的结构,我们就必须要了解到哈希表的扩容条件:

什么时候数组长度会扩容:

   1.当某一索引值位置的元素个数超过8个并且数组长度小于64时

   2.数组每个位置占有率达到加载因子时数组会扩容

       加载因子默认值为75%,我们可以通过有参构造的形式改变加载因子,

      initialCapacity值用于直接确定数组长度,实际长度>=传入长度最近的2的次方的值

      loadFactor值就是加载因子,我们可以自己定义

     情况实列:如果某一位置的元素个数大于八个且数组长度小于64时,此时数组会扩容

 

 什么情况下链表会转红黑树:

  当同意索引值位置下元素个数>8并且数组长度>=64时

 情况实列:如果某一位置的元素个数大于八个且数组长度大于等于64时

三.哈希表的优点 

     哈希表的优点就是能够同时兼具快速的查询数据,增删数据的能力

     其原因就是不论怎么添加数据,整个数据结构的纵深长度不会太大

四.哈希表不允许存储重复元素的原理

    我们需要知道哈希表增加元素的原理:

        1.计算要添加元素对象的哈希值

                (如果该元素对象的类型没有重写Object类中的HashCode()方法则默认用地址值计算)

        2.求出该哈希值要存放元素的对应数组索引位置

        3.判断该位置是否有元素

                (1)如果该位置有元素,则比较元素是否相同

                                                若不同则直接新增在该位置链表的最后

                                                若相同则不新增

                (2)如果该位置没有元素则直接新增

         判断元素是否相同的方式

                哈希值是否相同&&( 地址值是否相同 || equals是否相同 )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值