tnblog
首页
视频
资源
登录

常见数据结构之哈希表 11

4543人阅读 2022/6/17 20:19 总访问:1687130 评论:0 收藏:0 手机
分类: Java集合

一、哈希表

JDK8之前,底层采用数组+链表实现。

JDK8以后,底层进行了优化。由数组+链表+红黑树实现。

二、HashSet1.7版本原理解析

当要将元素存入HashSet时

1.创建时默认长度16,默认加载因子0.75的数组,数组名table
            加载因子的作用:当数组里面存了16*0.75 = 12个元素的时候,数组就会扩容为原先的两倍

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

3.判断当前位置是否为null,如果是null直接存入

4.如果应存入的位置不为null,表示有元素,则调用equals方法比较属性值

5.如果一样,则不存,如果不一样,则存入数组,老元素挂在新元素下面

样式如下图:
红色编号为元素添加的顺序,颜色相近(5至6)的为计算插入的位置相同,颜色相同(3和6)的为属性值也相同的

HashSet1.7版本原理总结

底层结构:哈希表。(数组+链表)数组的长度默认为16,加载因子为0.75

首先会先获取元素的哈希值,计算出在数组中应存入的索引
    判断该索引处是否为null

    如果是null,直接添加

    如果不是null,则与链表中所有的元素,通过equals方法比较属性值
    只要有一个相同,就不存,如果都不一样,才会存入集合。

三、HashSet1.8版本原理解析

底层结构∶哈希表。(数组、链表、红黑树的结合体)。

当挂在下面的元素过多,那么不利于添加,也不利于查询,所以在JDK8以后,当链表长度超过8的时候,自动转换为红黑树。但是存储流程不变。



案例:HashSet集合存储学生对象并遍历

需求∶创建一个HashSet集合,存储多个学生对象,并进行遍历

要求:学生对象的成员变量值相同,我们就认为是同一个对象

思路∶

①定义学生类
注意:没有重写hashCode方法,是根据对象的地址值计算的哈希值。如果不重写那么学生对象的成员变量值相同也会被存入。

②创建HashSet集合对象


评价

Windows平台分布式架构实践 - 负载均衡

原文地址: https://www.cnblogs.com/atree/p/windows_loadbalancer.html 概述  最近.NET的世界开始闹腾了,微软官方终...

如何评价java11

JDK11作为LTS长期支持版本, 在今后几年会逐步像JDK8一样流行, 因为下一个LTS版本要等待3年后的JDK17了.从JDK11累积了JDK9,1...

该用 Java 12 还是坚持 Java 11

搭上火箭也追不上的 Java 更新速度,不少程序员们大呼,我可不可以坚持使用 Java 8?!但是对于已使用到 LTS 版本的 Java 1...

皓月有趣论题 - U盘或其他存储设备 存入数据后 质量是否发生改变

转自我的个人博客 http://blog.axibug.com之前、朋友提出“U盘或其他存储设备 存入数据后 质量是否发生改变”的问题。那么...

ILSPY反编译时 常见IL推导错误

在使用ILSPY / dnSpy 等反编译工具对.net程序进行反编译的时候个别属性的读取和赋值、会被错误推导成带有get、set前缀的方...

确保.net程序始终以管理员身份运行

usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; usingSystem.Threading.Tasks; ...

简单反调试

//反调试程序一旦被调试则跳出 if(System.Diagnostics.Debugger.IsAttached) { //也可以添加其他操作 Application.Curr...

使用 微软自带语音合成类库

//引入语音合成名称空间 usingSystem.Speech.Synthesis; classA { voidtest1() { //实例化并指定字符串播放合成读音 ...

C创建定时服务

步骤一、创建服务项目。步骤二、添加安装程序。步骤三、服务属性设置【serviceInstaller1】。4.1 添加定时任务publicpartia...

CSS相对定位与绝对定位

一般相对定位和绝对定位可以配合起来使用 例如实现如下的效果 只需要在外层div设置为相对定位,在内部设置为绝对定位就...

百度编辑器本地缓存

百度编辑器默认有本地缓存。存储在localstorage中。可以防止用户在写文章的时候意外关闭后不至于之前写的内容会丢失读取本...

ASP.NET Timer细节处理

Timer的用法:1:本人称之为计时器,是asp.net官方的一种。用法即是计时所用 2:关于计时有很多中方式,本人学识有限,暂...

js遍历localStorage的键值对

//遍历本地存储localStorage for(vari=0;i<localStorage.length;i++){ varkey=localStorage.key(i);//获取本地存储的K...

Windows使用wireshark抓包小心得

wireshrak是个网络抓包工具,常用。但是在数据较大的网络环境中直接使用软件抓包会导致wireshark卡死。为什么呢 ?网卡瞬间...

Net Core中使用cookie

net core中可以使用传统的cookie也可以使用加密的cookieNET CORE中使用传统cookie设置:HttpContext.Response.Cookies.Appe...
没有个性,不需要签名
排名
4
文章
473
粉丝
3
评论
2
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术