Java中的HashSet集合存储数据的结构详解

 更新时间:2023年09月18日 10:29:10   作者:秃头不秃头农  
这篇文章主要介绍了Java中的HashSet集合存储数据的结构详解,数组结构他把元素进行分组,相同哈希值的元素是一组,链表/红黑树结构把相同哈希值的元素链接到一起,存储数据到集合中,先计算元素的哈希值,需要的朋友可以参考下

HashSet集合存储数据的结构(哈希表) 哈希表

哈希表

  • 在jdk1.8版本之前,哈希表=数组+链表结构
  • 在jdk1.8版本之后,值得注意的是。哈希表也=数组+链表,但是呢哈希表还=数组+红黑树(提高查询的速度)

所以说哈希表的特点:查询速度快

因为是一个集合,所以我们先画一个容器

在这里插入图片描述

数组结构他把元素进行分组,相同哈希值的元素是一组。链表/红黑树结构把相同哈希值的元素链接到一起,存储数据到集合中,先计算元素的哈希值。

在这里插入图片描述

随后当我们储存时,将哈希值放到数组中,当我们存储元素时,会将哈希值相同的元素挂在数组的下方,形象如下图:

在这里插入图片描述

在上一篇文中,我举例了两个特殊的字符串:重地和通话,这两个字符串的哈希值是相同的。这个我们称之为哈希冲突(两个元素不同,但是两个哈希值相同)。

在这里插入图片描述

当这两个数据进行存储时,也是将两个元素放在同一个哈希值下方:

在这里插入图片描述

哈希表查询的速度非常快,先把数据根据哈希值相同进行分组,数组查询速度本来就快,因为数组的地址是连续的。分组之后我们在查询时,先计算哈希值,然后通过哈希值找到所对应的元素。

如果链表的长度超过了8位,那么就会把链表转化为红黑树。目的就是提高查询的速度。

到此这篇关于Java中的HashSet集合存储数据的结构详解的文章就介绍到这了,更多相关HashSet集合存储数据的结构内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 2023年IDEA最新永久激活教程(亲测可用)

    2023年IDEA最新永久激活教程(亲测可用)

    打开电脑,发现 IDEA 又更新了一个小版本,2022.3.2 版本来了,真的是非常高兴,那么这么新的版本怎么激活使用呢?下面小编给大家带来了idea2023年最新永久激活方法,感兴趣的朋友一起看看吧
    2023-04-04
  • Java实现手写自旋锁的示例代码

    Java实现手写自旋锁的示例代码

    自旋锁是专为防止多处理器并发而引入的一种锁,它在内核中大量应用于中断处理等部分。本文将用Java实现手写自旋锁,需要的可以参考一下
    2022-08-08
  • Java实现图片拼接

    Java实现图片拼接

    这篇文章主要为大家详细介绍了Java实现图片拼接的相关代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • 基于SpringBoot和Vue3的博客平台的用户注册与登录功能实现

    基于SpringBoot和Vue3的博客平台的用户注册与登录功能实现

    本教程将指导您如何使用Spring Boot和Vue3实现用户注册与登录功能。我们将使用Spring Boot作为后端框架,Vue3作为前端框架,同时使用MySQL作为数据库,感兴趣的朋友可以参考一下
    2023-04-04
  • RabbitMQ使用案例详解

    RabbitMQ使用案例详解

    RabbitMQ是基于Erlang语言开发的开源的消息中间件,这篇文章给大家介绍RabbitMQ使用案例,感兴趣的朋友跟随小编一起看看吧
    2024-03-03
  • httpclient提交json参数的示例详解

    httpclient提交json参数的示例详解

    httpclient使用post提交json参数,和使用表单提交区分,本文结合示例代码讲解的非常详细,补充介绍了HttpClient请求传json参数的案例代码,感兴趣的朋友一起看看吧
    2024-02-02
  • Spring中HandlerMethod类源码详细解析

    Spring中HandlerMethod类源码详细解析

    这篇文章主要介绍了Spring中HandlerMethod类源码详细解析,HandlerMethod类用于封装控制器方法信息,包含类信息、方法Method对象、参数、注解等信息,具体的接口请求是可以根据封装的信息调用具体的方法来执行业务逻辑,需要的朋友可以参考下
    2023-11-11
  • 详解Java内存泄露的示例代码

    详解Java内存泄露的示例代码

    这篇文章通过一个Demo来简要介绍下ThreadLocal和ClassLoader导致内存泄露最终OutOfMemory的场景。下面通过示例代码给大家分享Java内存泄露的相关知识,感兴趣的朋友一起看看吧
    2017-12-12
  • java中transient关键字用法分析

    java中transient关键字用法分析

    这篇文章主要介绍了java中transient关键字用法,以实例形式分析了java中transient关键字的功能及使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • 详解JAVA中的for-each循环与迭代

    详解JAVA中的for-each循环与迭代

    本文详解了JAVA中的for-each循环与迭代,是JS入门学习中的基础知识,也是java中的难点知识,需要的朋友可以参考下 。
    2016-10-10

最新评论