首页 > 编程语言 >4-2-2.C# 数据容器 - HashSet 扩展(HashSet 集合操作、HashSet 存储对象的特性、HashSet 与数组的转换、HashSet 存储元素特性)

4-2-2.C# 数据容器 - HashSet 扩展(HashSet 集合操作、HashSet 存储对象的特性、HashSet 与数组的转换、HashSet 存储元素特性)

时间:2024-11-10 13:20:55浏览次数:6  
标签:存储 HashSet int 特性 item Add WriteLine new

HashSet 概述

  1. HashSet<T> 存储的元素是无序的

  2. HashSet<T> 存储的元素是不可重复的

  3. HashSet<T> 支持泛型,可以指定存储的元素的类型

  4. HashSet<T> 不支持索引,不可以通过索引获取或修改元素

  5. HashSet<T> 不是线程安全的,在多线程环境中需要谨慎使用


一、HashSet 集合操作

1、HashSet 的并集操作
  • 并集是指两个集合中所有的元素(不重复)组成的集合
HashSet<int> set1 = new HashSet<int> { 1, 2, 3 };
HashSet<int> set2 = new HashSet<int> { 3, 4, 5 };

HashSet<int> newSet = new HashSet<int>(set1);
newSet.UnionWith(set2);

foreach (int item in newSet)
{
    Console.WriteLine(item);
}
# 输出结果

1
2
3
4
5
2、HashSet 的交集操作
  • 交集是指两个集合中共有的元素组成的集合
HashSet<int> set1 = new HashSet<int> { 1, 2, 3 };
HashSet<int> set2 = new HashSet<int> { 3, 4, 5 };

HashSet<int> newSet = new HashSet<int>(set1);
newSet.IntersectWith(set2);

foreach (int item in newSet)
{
    Console.WriteLine(item);
}
# 输出结果

3

二、HashSet 存储对象的特性

  1. HashSet 存储对象或对对象进行检测时,对于没有重写 Equals 和 GetHashCode 方法的对象可能不太方便
HashSet<Person> persons = new HashSet<Person>();

persons.Add(new Person("tom", 20));
persons.Add(new Person("jack", 25));
persons.Add(new Person("jack", 25));

Console.WriteLine(persons.Count);


# 输出结果

3
False
False
  1. HashSet 存储对象时或对对象进行检测时,对于重写 Equals 和 GetHashCode 方法的对象比较方便
HashSet<Staff> staffs = new HashSet<Staff>();

staffs.Add(new Staff("tom", 20));
staffs.Add(new Staff("jack", 25));
staffs.Add(new Staff("jack", 25));

Console.WriteLine(staffs.Count);
# 输出结果

2
True
False

三、HashSet 与数组的转换

1、HashSet 转数组
HashSet<int> hashSet = new HashSet<int> { 1, 2, 3, 4, 5 };

int[] array = hashSet.ToArray();

foreach (int item in array)
{
    Console.WriteLine(item);
}
# 输出结果

1
2
3
4
5
2、数组转 HashSet
int[] array = { 1, 2, 3, 4, 5 };

HashSet<int> hashSet = new HashSet<int>(array);

foreach (int item in hashSet)
{
    Console.WriteLine(item);
}
# 输出结果

1
2
3
4
5

四、HashSet 存储元素特性

  1. HashSet 存储的元素是不可重复的
HashSet<int> nums = new HashSet<int>();

nums.Add(1);
nums.Add(2);
nums.Add(3);
nums.Add(1);

foreach (int num in nums)
{
    Console.WriteLine(num);
}
# 输出结果

1
2
3
  1. 利用 HashSet 存储的元素是不可重复的这一特点,可以对一组数据进行去重
int[] array = { 1, 1, 2, 2, 3, 3 };

HashSet<int> hashSet = new HashSet<int>(array);

foreach (int item in hashSet)
{
    Console.WriteLine(item);
}
# 输出结果

1
2
3

标签:存储,HashSet,int,特性,item,Add,WriteLine,new
From: https://blog.csdn.net/weixin_52173250/article/details/143644176

相关文章

  • 4-2-2.C# 数据容器 - HashSet(HashSet 的定义、HashSet 元素的基本操作、HashSet 元素
    HashSet概述HashSet<T>存储的元素是无序的HashSet<T>存储的元素是不可重复的HashSet<T>支持泛型,可以指定存储的元素的类型HashSet<T>不支持索引,不可以通过索引获取或修改元素HashSet<T>不是线程安全的,在多线程环境中需要谨慎使用一、HashSet的定义定义......
  • 《 C++ 修炼全景指南:十九 》想懂数据库?深入 B 树的世界,揭示高效存储背后的逻辑
    摘要本文深入探讨了B树的原理、操作、性能优化及其实际应用。B树作为一种平衡多路树结构,因其高效的查找、插入和删除操作广泛应用于数据库与文件系统中。文章首先介绍了B树的定义与性质,并详细阐述了节点分裂、合并等核心操作的实现方法。接着,通过分析B树在数据库检......
  • InnoDB 存储引擎<六> Redo log
    目录关于RedoLog的一些其余问题小结本篇承接自InnoDB存储引擎<五>的内容InnoDB存储引擎<五>关于RedoLog的一些其余问题4.不同⽇志类型对应了哪些操作?分析过程:1.⽇志类型总体可以分为三⼤类,分别是:⽤于数据⻚的⽇志类型、⽤于表空间⽂件的⽇志类型和提供额外信......
  • 深度学习工程实践:PyTorch Lightning与Ignite框架的技术特性对比分析
    在深度学习框架的选择上,PyTorchLightning和Ignite代表了两种不同的技术路线。本文将从技术实现的角度,深入分析这两个框架在实际应用中的差异,为开发者提供客观的技术参考。核心技术差异PyTorchLightning和Ignite在架构设计上采用了不同的方法论。Lightning通过提供高层次的抽象......
  • 将给定的表达式树(二叉链表存储)转换为等价的中缀表达式(递归)
    3765.表达式树可以拿这题验证自己的代码对不对ps:这里不是这题的答案,参照代码思路写即可voidBtreeToe(Btree*root){ BtreeToExp(root,1);//根的高度为1 }voidBtreeToExp(Btree*root,intdep){ if(root==NULL)return;//如果是空结点返回 elseif(!root->lef......
  • TS装饰器,我们来单独聊聊其特性以及提出时间
    目录⼀、简介1、装饰器本质是⼀种特殊的函数,它可以对:类、属性、⽅法、参数进⾏扩展,同时能让代码更简洁。2.装饰器⾃2015年在ECMAScript-6中被提出到现在,已将近10年3.截⽌⽬前,装饰器依然是实验性特性,需要开发者⼿动调整配置,来开启装饰器⽀持4.装饰器有5种1......
  • QT中大量数据存储至excel的问题解决
            因为这个问题困扰了我很久,所以在这里记录一下,顺便给可能会遇到类似问题的人提供一点帮助。        在qt中,如果用C++处理数据保存到excel,正常来说在pro文件中添加axcontainer 然后就能够调用到excel,但是这只能适用于数量级没那么大时的需求。  ......
  • LBA(Logical Block Addressing,逻辑块寻址)是一种硬盘寻址方式,用于将硬盘中的每个存储块
    LBA(逻辑块寻址)模式简介LBA(LogicalBlockAddressing,逻辑块寻址)是一种硬盘寻址方式,用于将硬盘中的每个存储块映射为一个唯一的逻辑地址。这种寻址方式使得操作系统能够通过逻辑地址而不是物理位置来访问硬盘数据,从而简化了硬盘的管理和数据访问。LBA的背景与作用在硬盘的传统寻......
  • **直接存储器访问(Direct Storage, DS)**是一种高效的数据传输技术,主要用于加速数据在计
    直接存储器访问(DirectStorage,DS)**直接存储器访问(DirectStorage,DS)**是一种高效的数据传输技术,主要用于加速数据在计算机系统中的传输过程。它允许设备(如硬盘、固态硬盘(SSD)或其他外部存储设备)直接将数据传输到内存,而不经过CPU的中介。通过减少CPU的干预,DS能够显著提高数据的......
  • CSS中 特性查询(@supports)详解及使用
    1.简介CSS中的@supports用于检测浏览器是否支持CSS的某个属性。其实就是条件判断,如果支持某个属性可以写一套样式,如果不支持某个属性,可以提供另外一套样式作为替补。可以放在代码的顶层,也可以嵌套在任何其他条件组规则中。语法@supports规则由一组样式声明和一条支持条件构......