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。
以下代码优化:
1 2 3 4 | if (dto.EkorgCode == "1" || dto.EkorgCode == "2" || dto.EkorgCode == "3" || dto.EkorgCode == "4" ) { } |
优化后:
1 2 3 4 5 6 7 | // 定义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不是线程安全的,如果在多线程环境中使用,需要额外的同步措施
基本示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | 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(); } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了