简述哈希表

了解Java中哈希表的底层
摘要由CSDN通过智能技术生成

哈希表的定义:根据设定的哈希函数 H(key) 和所选中的处理冲突的方法,将一组关键字映象到一个有限的、地址连续的地址集 (区间) 上,并以关键字在地址集中的“映像”作为相应记录在表中的存储位置,如此构造所得的查找表称之为“哈希表”。

在JDK1.6,JDK1.7中,HashMap采用数组+链表实现,即同一hash值的链表都存储在一个链表里。但是当位于一个桶中的元素较多,当hash值相等的元素较多时,通过key值依次查找的效率较低。

在JDK1.8中,HashMap采用位桶+链表+红黑树实现,当链表长度超过阈值时,将链表转换为红黑树,这样大大减少了查找时间。

哈希表的底层是数组+链表/红黑树的结构。

一 ,哈希表的核心成员

    默认初始容量(数组的默认大小):16,2的次方
    static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16

    最大容量
    static final int MAXIMUM_CAPACITY = 1 << 30;

    默认的负载因子
    static final float DEFAULT_LOAD_FACTOR = 0.75f;
    当map中存储数据达到了75%就会进行扩容

    链表扩容的边界,链表长度的阈值,当超过8时,会进行树化
    static final int TREEIFY_THRESHOLD = 8;
    当大于8以后就会进行扩容,将这8个数据进行平均分配
   
    红黑数转离链表边界,当树中只有6个或以下,转化为链表。
    static final int UNTREEIFY_THRESHOLD = 6;

 这张图就充分的说明了哈希表是如何的进行存储,下面就去介绍哈希表是如何进行存储数据的过程,以及为什么会出现红黑树的原因展开进行讲解。

二,从哈希表的结构上来说最重要的是数组,Node数组就是它的数组

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值