Rust学习笔记_18——HashSet

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


HashSet

文章目录

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

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

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

1. 创建

rust 复制代码
// 引入HashSet类型
use std::collections::HashSet;

// 创建HashSet实例
let mut set: HashSet<i32> = HashSet::new();

2. 插入

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

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

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

3. 检查元素是否存在

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

rust 复制代码
let exists = set.contains(&1); // 这将返回 true

4. 遍历

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

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

rust 复制代码
for elem in &set {
    println!("{}", elem);
}

5. 移除

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

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

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

6. 工作原理

HashSet 是基于哈希表实现的。

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

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

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

7. 示例

rust 复制代码
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);
    }
}
相关推荐
CCCC13101632 小时前
嵌入式学习(day 28)线程
jvm·学习
星星火柴9363 小时前
关于“双指针法“的总结
数据结构·c++·笔记·学习·算法
小狗爱吃黄桃罐头3 小时前
正点原子【第四期】Linux之驱动开发篇学习笔记-1.1 Linux驱动开发与裸机开发的区别
linux·驱动开发·学习
艾莉丝努力练剑4 小时前
【洛谷刷题】用C语言和C++做一些入门题,练习洛谷IDE模式:分支机构(一)
c语言·开发语言·数据结构·c++·学习·算法
寻月隐君4 小时前
硬核实战:从零到一,用 Rust 和 Axum 构建高性能聊天服务后端
后端·rust·github
武昌库里写JAVA5 小时前
JAVA面试汇总(四)JVM(一)
java·vue.js·spring boot·sql·学习
Cx330❀5 小时前
【数据结构初阶】--排序(五):计数排序,排序算法复杂度对比和稳定性分析
c语言·数据结构·经验分享·笔记·算法·排序算法
杜子不疼.5 小时前
《Python学习之字典(一):基础操作与核心用法》
开发语言·python·学习
小幽余生不加糖5 小时前
电路方案分析(二十二)适用于音频应用的25-50W反激电源方案
人工智能·笔记·学习·音视频
..过云雨6 小时前
01.【数据结构-C语言】数据结构概念&算法效率(时间复杂度和空间复杂度)
c语言·数据结构·笔记·学习