网站建设与管理课程项目/佛山百度网站快速排名

网站建设与管理课程项目,佛山百度网站快速排名,网站开发达成口头协议算不算诈骗,模板手机网站建设公司在 Java 集合框架中,HashSet 是一个非常常用的集合类,它提供了快速的元素查找和插入操作。那么,HashSet 的底层是如何实现这些高效操作的呢?本文将深入探讨 HashSet 的底层原理。 一、HashSet 的基本概念 HashSet 是基于哈希表的…

        在 Java 集合框架中,HashSet 是一个非常常用的集合类,它提供了快速的元素查找和插入操作。那么,HashSet 的底层是如何实现这些高效操作的呢?本文将深入探讨 HashSet 的底层原理。

一、HashSet 的基本概念

HashSet 是基于哈希表的 Set 接口的实现,它不允许集合中出现重复元素。当我们向 HashSet 中添加元素时,HashSet 会使用元素的哈希值来决定元素在集合中的存储位置,这样可以大大提高查找和插入的效率。

二、底层数据结构

HashSet 的底层实现依赖于 HashMap。在 HashSet 的源码中,可以看到它实际上是通过一个 HashMap 来存储元素的。当我们向 HashSet 中添加元素时,实际上是将元素作为键值对的键存入 HashMap 中,而值则是一个固定的 Object 对象(PRESENT)。


private transient HashMap<E,Object> map;// Dummy value to associate with an Object in the backing Mapprivate static final Object PRESENT = new Object();public HashSet() {map = new HashMap<>();}public boolean add(E e) {return map.put(e, PRESENT)==null;}

三、哈希值的作用

哈希值是 HashSet 实现高效操作的关键。当我们向 HashSet 中添加元素时,HashSet 首先会计算元素的哈希值,然后根据哈希值确定元素在哈希表中的存储位置。如果两个元素的哈希值相同,那么它们就会被存储在哈希表的同一个位置(称为哈希冲突)。

四、解决哈希冲突

在实际应用中,哈希冲突是不可避免的。为了解决哈希冲突,HashMap(HashSet 底层使用的是 HashMap)采用了链地址法。具体来说,当发生哈希冲突时,HashMap 会将冲突的元素存储在一个链表中,这个链表被称为桶(bucket)。在 Java 8 及以后的版本中,如果链表的长度超过一定阈值(默认为 8),链表会被转换为红黑树,以提高查找效率。

五、HashSet 的操作原理

  1. 添加元素:当我们调用 HashSet 的 add 方法添加元素时,HashSet 会先计算元素的哈希值,然后根据哈希值确定元素在哈希表中的存储位置。如果该位置为空,直接将元素存入;如果该位置已存在元素(即发生哈希冲突),则将新元素添加到链表或红黑树中。
  1. 查找元素:当我们调用 HashSet 的 contains 方法查找元素时,HashSet 同样会先计算元素的哈希值,然后根据哈希值确定元素在哈希表中的存储位置。如果该位置为空,说明元素不存在;如果该位置存在元素,则在链表或红黑树中查找该元素。
  1. 删除元素:当我们调用 HashSet 的 remove 方法删除元素时,HashSet 会先计算元素的哈希值,然后根据哈希值确定元素在哈希表中的存储位置。如果该位置存在元素,则在链表或红黑树中删除该元素。

六、总结

HashSet 的底层原理基于哈希表和 HashMap,通过哈希值来快速定位元素的存储位置,并使用链地址法解决哈希冲突。了解 HashSet 的底层原理,有助于我们在实际编程中更好地使用它,提高程序的性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/895751.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【学习资源】时间序列数据分析方法(2)-mWDN和AutoEncoder

接着上次的【学习资源】时间序列数据分析方法&#xff08;1&#xff09;-CSDN博客&#xff0c;本次介绍mWDN和AutoEncoder 解决时序数据分类的方法。介绍模型原理、应用场景和参考代码。也从模型性能、训练效率、模型复杂度、计算复杂度、可解释性、适应性和泛化能力、健壮性、…

【TI C2000】F28002x的系统延时、GPIO配置及SCI(UART)串口发送、接收

【TI C2000】F28002x的系统延时、GPIO配置及SCI&#xff08;UART&#xff09;串口发送、接收 文章目录 系统延时GPIO配置GPIO输出SCI配置SCI发送、接收测试附录&#xff1a;F28002x开发板上手、环境配置、烧录及TMS320F280025C模板工程建立F28002x叙述烧录SDK库文件说明工程建…

亲测有效!使用Ollama本地部署DeepSeekR1模型,指定目录安装并实现可视化聊天与接口调用

文章目录 一、引言二、准备工作&#xff08;Ollama 工具介绍与下载&#xff09;2.1 Ollama介绍2.2 Ollama安装 三、指定目录安装 DeepSeek R1四、Chatbox 可视化聊天搭建4.1 Chatbox下载安装4.2 关联 DeepSeek R1 与 Chatbox 的步骤 五、使用 Ollama 调用 DeepSeek 接口5.1 请求…

Python 面向对象的三大特征

前言&#xff1a;本篇讲解面向对象的三大特征&#xff08;封装&#xff0c;继承&#xff0c;多态&#xff09;&#xff0c;还有比较细致的&#xff08;类属性类方法&#xff0c;静态方法&#xff09;&#xff0c;分步骤讲解&#xff0c;比较适合理清楚三大特征的思路 面向对象的…

Jmeter如何计算TPS

1.在jmeter中计算出接口请求的个数 1175 1172 1172 174 200 416 384 1174 5867 2.计算接口平均响应时间 计算每个接口的请求次数乘以平均响应时间&#xff0c;所有接口相加&#xff0c;然后除以所有接口的数量总和&#xff0c;得到接口的平均响应时间 (1175*18191172*…

docker push镜像到阿里云

阿里云账号 阿里云-计算&#xff0c;为了无法计算的价值 开通个人镜像容器 进入控制台&#xff0c;试用容器 实例列表界面 点击上图中的个人&#xff0c;个人版特性 创建个人版&#xff1a; 个人版实例界面&#xff1a; 设置密码 个人版实例&#xff1a; 创建镜像仓库 如上…

大模型与智能体:螺旋共生,绘就智能新蓝图

大模型与智能体&#xff1a;螺旋共生&#xff0c;绘就智能新蓝图 在人工智能的前沿领域&#xff0c;大模型与智能体宛如两颗璀璨的星辰&#xff0c;以一种精妙的螺旋共生关系&#xff0c;重塑着智能世界的格局&#xff0c;深刻影响着我们生活与工作的方方面面。 大模型&#x…

第2章 信息技术发展(一)

2.1 信息技术及其发展 2.1.1 计算机软硬件 计算机硬件(Computer Hardware)是指计算机系统中由电子、机械和光电元件等组成的各种物理装置的总称。 计算机软件 (Computer Software)是指计算机系统中的程序及其文档&#xff0c;程序是计算任务的处理对象和处理规则的描述; 文档…

CentOS系统docker配置镜像加速registry-mirrors,配置阿里云和道客

1.可用仓库 1.1.阿里云 2022年之后的镜像缺失&#xff08;因为被墙了&#xff09;&#xff0c;但是网速极快 https://g4f7bois.mirror.aliyuncs.com1.2.上海道客 持续更新&#xff0c;但是网速极慢 https://docker.m.daocloud.io2.CentOS配置脚本 注意顺序。阿里云的放前…

DeepSeek24小时写作机器人,持续创作高质量文案

内容创作已成为企业、自媒体和创作者的核心竞争力。面对海量的内容需求&#xff0c;人工创作效率低、成本高、质量参差不齐等问题日益凸显。如何在有限时间内产出高质量内容&#xff1f;DeepSeek写作机器人&#xff0c;一款24小时持续创作的智能工具&#xff0c;为企业和个人提…

CPP集群聊天服务器开发实践(五):nginx负载均衡配置

1 负载均衡器的原理与功能 单台Chatserver可以容纳大约两万台客户端同时在线聊天&#xff0c;为了提升并发量最直观的办法需要水平扩展服务器的数量&#xff0c;三台服务器可以容纳六万左右的客户端。 负载均衡器的作用&#xff1a; 把client的请求按照负载均衡算法分发到具体…

【论文笔记】Transformer^2: 自适应大型语言模型

Code repo: https://github.com/SakanaAI/self-adaptive-llms 摘要 自适应大型语言模型&#xff08;LLMs&#xff09;旨在解决传统微调方法的挑战&#xff0c;这些方法通常计算密集且难以处理多样化的任务。本文介绍了Transformer&#xff08;Transformer-Squared&#xff09;…

HTTP的“对话”逻辑:请求与响应如何构建数据桥梁?

一、前言 作为现代互联网通信的基石&#xff0c;HTTP协议定义了客户端与服务器之间的“对话规则”。每一次网页加载、API调用或文件传输的背后&#xff0c;都离不开精心构造的HTTP请求与响应。请求中封装了用户的意图——从请求方法、资源路径到提交的数据&#xff1b;响应则承…

安装 Docker Desktop 修改默认安装目录到指定目录

Docker Desktop安装目录设置 Docker Desktop 默认安装位置 &#xff08;C:\Program Files\Docker\Docker) 是这个 &#xff0c;导致系统盘占用过大&#xff0c;大概2G ; 那么如何安装到其他磁盘呢&#xff1f; 根据docker desktop 官网 Docker Desktop install 我们可以看到&a…

Kotlin Lambda

Kotlin Lambda 在探索Kotlin Lambda之前&#xff0c;我们先回顾下Java中的Lambda表达式&#xff0c;Java 的 Lambda 表达式是 Java 8 引入的一项强大的功能&#xff0c;它使得函数式编程风格的代码更加简洁和易于理解。Lambda 表达式允许你以一种更简洁的方式表示实现接口&…

PyQt组态软件 拖拽设计界面测试

PyQt组态软件测试 最近在研究PyQt,尝试写个拖拽设计界面的组态软件&#xff0c;目前实现的功能如下&#xff1a; 支持拖入控件&#xff0c;鼠标拖动控件位置 拖动控件边缘修改控件大小支持属性编辑器&#xff0c;修改当前选中控件的属性 拖动框选控件&#xff0c;点选控件 控…

机器学习-1:线性回归

常用的线性回归模型主要有以下这些 简单线性回归多元线性回归多项式回归岭回归套索回归弹性网络回归逐步回归 一.简单的一元线性回归 1.导入必备的库 #导入必备的库 import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.model_selection …

NO.18十六届蓝桥杯备战|循环嵌套|乘法表|斐波那契|质数|水仙花数|(C++)

循环嵌套 循环嵌套的使⽤ while &#xff0c; do while &#xff0c; for &#xff0c;这三种循环往往会嵌套在⼀起才能更好的解决问题&#xff0c;就是我们所说的&#xff1a;循环嵌套。这三种循环都可以任意嵌套使⽤ ⽐如&#xff1a; 写⼀个代码&#xff0c;打印⼀个乘法⼝…

JavaEE-SpringBoot快速入门

文章目录 本节目标Maven什么是Maven创建一个Maven项目maven项目功能maven的依赖管理全球仓库, 私服, 本地服务器, 配置国内镜像 第一个SpringBoot项目创建项目运行SpringBoot程序 SpringBoot原理初步Web服务器 总结 本节目标 了解什么是maven, 配置国内源使用Springboot创建项…

【AI实践】deepseek支持升级git

当前Windows 11 WSL的git是2.17&#xff0c;Android Studio提示需要升级到2.19版本 网上找到指导文章 安装git 2.19.2 cd /usr/src wget https://www.kernel.org/pub/software/scm/git/git-2.19.2.tar.gz tar xzf git-2.19.2.tar.gz cd git-2.19.2 make prefix/usr/l…