C#数据结构 HashSet 用法
原文链接:https://www.cnblogs.com/jk-2048/p/18030587
https://blog.csdn.net/xiongyanglai/article/details/136473932
1、所属命名空间
.NET 3.5在 System.Collections.Generic 命名空间中包含一个新的集合类:HashSet
这个集合类包含不重复项的无序列表称作HashSet。(类似C++的unordered_set?)
这个集合基于散列hash值,插入元素的操作非常快,不需要像List类那样重排集合。
2、操作函数表
Add重载:
Hashset还提供了另一个Add()方法重载。它返回一个布尔值,说明是否添加了元素。如果该元素已经在集中,就不添加它,并返回false。
以下代码优化:
if (dto.EkorgCode == "1" || dto.EkorgCode == "2" || dto.EkorgCode == "3" || dto.EkorgCode == "4")
{
}
优化后:
// 定义EkorgCode的集合
var ekorgCodes = new HashSet<string> { "1", "2", "3", "4" };
// 检查dto的EkorgCode是否在ekorgCodes集合中
if (ekorgCodes.Contains(dto.EkorgCode))
{
}
总结
HashSet 是C#中的一个集合类,它位于 System.Collections.Generic 命名空间中。HashSet 实现了 ISet 接口,并且是一个无序的集合,它不允许有重复的元素。HashSet 使用哈希算法来存储和检索元素,这意味着查找、添加和删除操作通常具有接近O(1)的平均时间复杂度,这是非常高效的。
下面是HashSet的一些主要特点和用法:
特点
无序性:HashSet不保证元素的顺序,也就是说,元素的插入顺序可能与遍历时的顺序不同。
唯一性:HashSet不允许有重复的元素。尝试添加一个已经存在的元素将不会有任何效果。
高性能:由于使用哈希表作为内部数据结构,HashSet提供了非常快速的查找、添加和删除操作。
不支持索引:由于是无序的,HashSet不支持通过索引来访问元素。
线程不安全:HashSet不是线程安全的,如果在多线程环境中使用,需要额外的同步措施
基本示例:
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
// 创建一个HashSet<int>的实例
HashSet<int> numbers = new HashSet<int>();
// 向HashSet中添加元素
numbers.Add(1);
numbers.Add(2);
numbers.Add(3);
// 尝试添加一个已经存在的元素,不会有任何效果
numbers.Add(2);
// 检查一个元素是否在HashSet中
bool containsFour = numbers.Contains(4); // 返回false,因为4不在集合中
// 遍历HashSet中的所有元素
foreach (int number in numbers)
{
Console.WriteLine(number);
}
// 移除一个元素
numbers.Remove(1);
// 清除所有元素
numbers.Clear();
}
}
浙公网安备 33010602011771号