Rust学习笔记_18——HashSet

Rust学习笔记_15——Union
Rust学习笔记_16——Vector
Rust学习笔记_17——HashMap


HashSet

文章目录

    • HashSet
      • 1. 创建
      • 2. 插入
      • 3. 检查元素是否存在
      • 4. 遍历
      • 5. 移除
      • 6. 工作原理
      • 7. 示例


Rust 中的 HashSet 是一种集合数据结构,它允许你存储不重复的元素,并且可以在常数时间内(O(1) 平均时间复杂度)检查一个元素是否存在于集合中。

HashSet 也是 Rust 标准库的一部分,位于 std::collections 模块中。

1. 创建

// 引入HashSet类型
use std::collections::HashSet;// 创建HashSet实例
let mut set: HashSet<i32> = HashSet::new();

2. 插入

使用 insert 方法可以向 HashSet 中插入元素。

由于 HashSet 不允许重复元素,如果尝试插入一个已经存在的元素,insert 方法将返回 false,否则返回 true

set.insert(1);
set.insert(2);
set.insert(2); // 这将返回 false,因为 2 已经存在于集合中

3. 检查元素是否存在

使用 contains 方法可以检查一个元素是否存在于 HashSet 中。该方法返回一个布尔值。

let exists = set.contains(&1); // 这将返回 true

4. 遍历

使用迭代器来遍历 HashSet 中的元素。

由于 HashSet 不保证元素的存储顺序,因此遍历的顺序是不确定的。

for elem in &set {println!("{}", elem);
}

5. 移除

使用 remove 方法可以从 HashSet 中移除一个元素。

如果元素存在并被成功移除,该方法将返回 true,否则返回 false

set.remove(&1); // 这将返回 true,并从集合中移除元素 1

6. 工作原理

HashSet 是基于哈希表实现的。

当你向 HashSet 中插入一个元素时,它的哈希值被计算出来,并用来确定元素在内部数组(也称为“桶”或“槽”)中的位置。

如果两个元素的哈希值相同(即发生了哈希冲突),它们将被存储在同一个桶中,并通过链地址法(也称为“拉链法”)或开放地址法来解决冲突。

在 Rust 的 HashSet 实现中,默认使用了 SipHash 作为哈希函数,这是因为它提供了良好的哈希分布和防御哈希洪水攻击的能力。

7. 示例

use std::collections::HashSet;fn main() {let mut set: HashSet<i32> = HashSet::new();// 插入元素set.insert(1);set.insert(2);set.insert(2); // 这将不会改变集合,因为 2 已经存在// 检查元素是否存在if set.contains(&1) {println!("1 is in the set");}// 移除元素set.remove(&1);if !set.contains(&1) {println!("1 is not in the set anymore");}// 遍历for elem in &set {println!("{}", elem);}
}

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

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

相关文章

uniapp远程摄像头流界面上显示

用到的插件&#xff1a;dplayer、hls dplayer官网&#xff1a;dplayer dplayer官网npm安装的是最新版本&#xff08;1.27.1&#xff09;&#xff0c;真机运行异常了&#xff0c;可以安装历史版本 dplayer历史版本 远程摄像头视频流格式&#xff1a;m3u8 可以用来测试的视频流&a…

001-mysql安装

[rootcentos701 ~]# hostname -I 10.0.0.200 172.17.0.1 [rootcentos701 ~]# hostname centos701 [rootcentos701 ~]# rpm -qa | grep mariadb [rootcentos701 ~]# rpm -e --nodeps mariadb-libs-5.5.65-1.el7.x86_64 [rootcentos701 ~]# useradd mysql -s /sbin/nologin #创建…

ubuntu20.04设置远程桌面

安装xrdp sudo apt install xrdp 2、 检查xrdp状态 sudo systemctl status xrdp3、&#xff08;若为Ubuntu 20&#xff09;添加xrdp至ssl-cert sudo adduser xrdp ssl-cert 4、重启服务 sudo systemctl restart xrdp最后可以远程了&#xff0c;注意一个账号只能一个登录

SpringBoot3配置文件

一、统一配置管理概述: SpringBoot工程下&#xff0c;进行统一的配置管理&#xff0c;你想设置的任何参数(端口号、项目根路径、数据库连接信息等等)都集中到一个固定位置和命名的配置文件(application.properties或application.yml)中 配置文件应该放置在Spring Boot工程的s…

三、【docker】docker和docker-compose的常用命令

文章目录 一、docker常用命令1、镜像管理2、容器管理3、容器监控和调试4、网络管理5、数据卷管理6、系统维护7、实用组合命令8、常用技巧二、docker-compose常用命令1、基本命令2、构建相关3、运行维护4、常用组合命令5、实用参数 一、docker常用命令 1、镜像管理 # 查看本地…

【机器学习】任务十一:Keras 模块的使用

1.Keras简介 1.1 什么是Keras&#xff1f; Keras 是一个开源的深度学习框架&#xff0c;用 Python 编写&#xff0c;构建于 TensorFlow 之上。它以简单、快速和易于使用为主要设计目标&#xff0c;适合初学者和研究者。 Keras 提供了高层次的 API&#xff0c;帮助用户快速构…

【新品发布】ESP32-P4开发板 —— 启明智显匠心之作,为物联网及HMI产品注入强劲动力

核心亮点&#xff1a; ESP32-P4开发板&#xff0c;是启明智显精心打造的一款高性能物联网开发板。它专为物联网项目及HMI&#xff08;人机界面&#xff09;产品而设计&#xff0c;旨在为您提供卓越的性能和稳定可靠的运行体验。 强大硬件配置&#xff1a; 双核400MHz RISC-V处…

在Ubuntu22.04.5上安装Docker-CE

文章目录 1. 查看Ubuntu版本2. 安装Docker-CE2.1 安装必要的系统工具2.2 信任Docker的GPG公钥2.3 写入软件源信息2.4 安装Docker相关组件2.5 安装指定版本Docker-CE2.5.1 查找Docker-CE的版本2.5.2 安装指定版本Docker-CE 3. 启动与使用Docker3.1 启动Docker服务3.2 查看Docker…

SSM01-MyBatis框架(一文学会MyBatis)

Mybatis框架 一、Mybatis框架简介 1.1 传统JDBC的缺陷 &#xff08;1&#xff09;数据库连接创建、释放频繁会造成系统资源浪费 【MyBatis通过在核心配置文件中配置数据路连接池解决此问题】 &#xff08;2&#xff09; SQL语句在代码中硬编码(PreparedStatement向占位符传…

uniapp中导入uview或者uview plus

关于SCSS uview-plus依赖SCSS&#xff0c;您必须要安装此插件&#xff0c;否则无法正常运行。 如果您的项目是由HBuilder X创建的&#xff0c;相信已经安装scss插件&#xff0c;如果没有&#xff0c;请在HX菜单的 工具->插件安装中找到"scss/sass编译"插件进行安…

深度解析 Ansible:核心组件、配置、Playbook 全流程与 YAML 奥秘(上)

文章目录 一、ansible的主要组成部分二、安装三、相关文件四、ansible配置文件五、ansible 系列 一、ansible的主要组成部分 ansible playbook&#xff1a;任务剧本&#xff08;任务集&#xff09;&#xff0c;编排定义ansible任务集的配置文件&#xff0c;由ansible顺序依次执…

【CC2530开发基础篇】光敏和热敏传感器

一、前言 1.1 开发背景 本实验通过CC2530单片机接入光敏传感器和热敏传感器&#xff0c;进行数据采集与检测&#xff0c;并将检测结果通过串口终端输出。光敏传感器和热敏传感器是常见的环境感知设备&#xff0c;分别用于测量光强和温度。在实际应用中&#xff0c;这些传感器…

第6章:布局 --[CSS零基础入门]

CSS 布局是网页设计中至关重要的一个方面&#xff0c;它决定了页面上元素的排列和展示方式。以下是几种常见的 CSS 布局方法和技术&#xff1a; 1. 浮动布局&#xff08;Float Layout&#xff09; 浮动布局&#xff08;Float Layout&#xff09;曾经是网页设计中创建多列布局…

设计模式:20、状态模式(状态对象)

目录 0、定义 1、状态模式的三种角色 2、状态模式的UML类图 3、示例代码 0、定义 允许一个对象在其内部状态改变时改变它的行为&#xff0c;对象看起来似乎修改了它的类。 1、状态模式的三种角色 环境&#xff08;Context&#xff09;&#xff1a;环境是一个类&#xff0…

【论文笔记】VisionZip: Longer is Better but Not Necessary in Vision Language Models

&#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xff0c;为万世开太平。 基本信息 标题: VisionZip: Longer is Bet…

flex: 1 display:flex 导致的宽度失效问题

flex: 1 & display:flex 导致的宽度失效问题 问题复现 有这样的一个业务场景&#xff0c;详情项每行三项分别占33%宽度&#xff0c;每项有label字数不固定所以宽度不固定&#xff0c;还有content 占满标签剩余宽度&#xff0c;文字过多显示省略号&#xff0c; 鼠标划入展示…

visual studio2019开发过程中遇到的问题和有帮助的插件

文章目录 1. 注释中有中文导致报错2. 打开一个vs2013或者vs2010等老的项目兼容性3. LNK2019 unresolved external symbol main referenced in function __tmainCRTStartup4. image watch插件/扩展使用 1. 注释中有中文导致报错 C4819 The file contains a character that cann…

存内架构IR-DROP问题详解-电容电导补偿

一、总述 电容、电导补偿作为大规模数字电路的关键设计理念&#xff0c;是 CIM 架构优化的核心技术。在 CIM 中&#xff0c;平衡电容或电导并实现计算的精准映射&#xff0c;对能效提升和计算精度保障具有关键作用。本文基于近期文献探讨电容、电导补偿在 CIM 中的具体补偿策…

HDR视频技术之六:色调映射

图像显示技术的最终目的就是使得显示的图像效果尽量接近人们在自然界中观察到的对应的场景。 HDR 图像与视频有着更高的亮度、更深的位深、更广的色域&#xff0c;因此它无法在常见的普通显示器上显示。 入门级的显示器与播放设备&#xff08;例如普通人家使用的电视&#xff0…

隐式神经网络实现低光照图像增强

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…