栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

简述哈希表

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

简述哈希表

目录

一.哈希值

二.哈希表的结构

三.哈希表的优点

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


一.哈希值

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

        

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

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

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

二.哈希表的结构

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

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

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

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

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

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

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

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

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

 

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

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

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

三.哈希表的优点 

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

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

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

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

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

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

        2.求出该哈希值要存放元素的对应数组索引位置         3.判断该位置是否有元素

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

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

                                                若相同则不新增

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

         判断元素是否相同的方式

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1038955.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号