自学内容网 自学内容网

Java集合HashSet——HashSet在底层原理

可点击此处:HashSet在底层原理

在这里插入图片描述

  • 创建一个默认长度16,默认加载因子为0.75的数组,数组名table

    16*0.75 = 12,如果存入的数据达到12,则数组自动扩容为原来的2倍

  • 根据元素的哈希值跟数组的长度计算出应存入的位置

    int index = (数组长度-1) & 哈希值;

  • 如果位置为null,直接存入

  • 如果位置不为null 表示有元素,则调用equals方法比较属性值

    一样;不存 不一样:存入数组,形成链表

    jdk8以前:新元素存入数组,老元素挂在新元素下面

    jdk8以后:新元素直接挂在老元素下面

  • jdk8以后,当链表长度超过8,且数组长度大于等于64时,链表自动转换为红黑树。

  • 如果集合中存储的时自定义对象,必须重写hashCode方法和equals方法。

HashSet是利用什么机制保证去重?

  • 利用HashCode方法和equals方法
  • HashCode方法来计算出哈希值,根据哈希值计算机出要元素要存入的位置,然后再调用equals方法比较对象内部的属性值是否一样

HashSet为什么存和取的顺序不一样?

HashSet为什么没有索引?


原文地址:https://blog.csdn.net/weixin_54555405/article/details/142444902

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!