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();  
    }  
}

  

posted @ 2024-05-02 23:58  yinghualeihenmei  阅读(16)  评论(0编辑  收藏  举报