c#_HashSet
HashSet介绍
HashSet为System.Collections.Generic
命名空间下的 HashSet<T>
类,它具有无序性、唯一性。
由于他的特性所以他不能做排序操作、不能像数组那样使用索引(无法使用for循环(foreach可以))、不能有重复元素。
注意:HashSet 可以存放单个的 null 值;如果你向HashSet中添加重复元素HashSet会忽略此次操作。
HashSet应用
1、根据HashSet的构造函数重载,声明HashSet实例时构造函数实参可以用集类型
static void Main(string[] args)
{string[] cities = new string[] {"Delhi" , "Kolkata","New York" , "London","Tokyo" , "Washington","Tokyo"};HashSet<string> hashSet = new HashSet<string>(cities);foreach (var city in hashSet){Console.WriteLine(city);}
}
2、判断某一个元素是否在 HashSet 内,建议使用 Contains 进行判断
static void Main(string[] args)
{HashSet<string> hashSet = new HashSet<string>();hashSet.Add("A");hashSet.Add("B");hashSet.Add("C");hashSet.Add("D");if (hashSet.Contains("D"))Console.WriteLine("The required element is available.");elseConsole.WriteLine("The required element isn’t available.");Console.ReadKey();
}
3、从 HashSet 中移除元素Remove、RemoveWhere
1)Remove
如果成功找到并移除该元素,则为 true
;否则为 false
。 如果未在 HashSet<T> 对象中找到 item
,则此方法返回 false
。
2)RemoveWhere
参数为Predicate<T> 委托,用于定义要移除的元素应满足的条件。返回值为(Int32)集合中移除的元素数。
我的理解是他拿着这个条件去HashSet实例中去判断元素是否满足移除条件,满足则移除,并返回移除了多少个元素。
HashSet<int> numbers = new HashSet<int>();for (int i = 0; i < 20; i++) {numbers.Add(i);
}// Display all the numbers in the hash table.
Console.Write("numbers contains {0} elements: ", numbers.Count);
DisplaySet(numbers);// Remove all odd numbers.
numbers.RemoveWhere(IsOdd);
Console.Write("numbers contains {0} elements: ", numbers.Count);
DisplaySet(numbers);// Check if the hash table contains 0 and, if so, remove it.
if (numbers.Contains(0)) {numbers.Remove(0);
}
Console.Write("numbers contains {0} elements: ", numbers.Count);
DisplaySet(numbers);bool IsOdd(int i)
{return ((i % 2) == 1);
}void DisplaySet(HashSet<int> set)
{Console.Write("{");foreach (int i in set)Console.Write(" {0}", i);Console.WriteLine(" }");
}// This example displays the following output:
// numbers contains 20 elements: { 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 }
// numbers contains 10 elements: { 0 2 4 6 8 10 12 14 16 18 }
// numbers contains 9 elements: { 2 4 6 8 10 12 14 16 18 }
3)clear
如果你想删除 HashSet 中的所有元素,可以调用 Clear ()方法。
4、HashSet 的 set 操作
1)IsProperSubsetOf
它用于判断 HashSet 是否为某一个集合的完全子集
HashSet<string> setA = new HashSet<string>() { "A", "B", "C", "D" };
HashSet<string> setB = new HashSet<string>() { "A", "B", "C", "X" };
HashSet<string> setC = new HashSet<string>() { "A", "B", "C", "D", "E" };
if (setA.IsProperSubsetOf(setC))Console.WriteLine("setC contains all elements of setA.");
if (!setA.IsProperSubsetOf(setB))Console.WriteLine("setB does not contains all elements of setA.");
2)UnionWith
它常用于集合的合并
HashSet<string> setA = new HashSet<string>() { "A", "B", "C", "D", "E" };
HashSet<string> setB = new HashSet<string>() { "A", "B", "C", "X", "Y" };
setA.UnionWith(setB);
//SetA集合将会是包括:"A", "B", "C", "D", "E", "X", "Y"
3)IntersectWith
表示两个 HashSet 的交集
HashSet<string> setA = new HashSet<string>() { "A", "B", "C", "D", "E" };
HashSet<string> setB = new HashSet<string>() { "A", "X", "C", "Y"};
setA.IntersectWith(setB);
//setA集合元素结果为:"A", "C"
4)ExceptWith
表示数学上的减法操作,这个时间复杂度是 O(N),假定你有两个HashSet 集合,分别叫 setA 和 setB,并且用了下面的语句。
它返回的元素为:setA中有而setB中没有 的最终结果
HashSet<string> setA = new HashSet<string>() { "A", "B", "C", "D", "E" };
HashSet<string> setB = new HashSet<string>() { "A", "X", "C", "Y" };
setA.ExceptWith(setB);
//setA集合元素结果为:"B", "D", "E"
5)SymmetricExceptWith
常用于修改一个 HashSet 来存放两个 HashSet 都是唯一的元素,换句话说,我要的就是两个集合都不全有的元素
HashSet<string> setA = new HashSet<string>() { "A", "B", "C", "D", "E" };
HashSet<string> setB = new HashSet<string>() { "A", "X", "C", "Y" };
setA.SymmetricExceptWith(setB);
setA中有而setB中没有 和 setB中有而setA中没有的元素将会输出:
c#_HashSet相关推荐
- Java实现二树杈_HashSet的hashCode方法和equals方法的重写,TreeSet中compareTo方法的重写,Comparator在treeSet中的应用。...
HashSet的hashCode方法和equals方法的重写,TreeSet中compareTo方法的重写,Comparator在treeSet中的应用. HashSet: 首先,hashset底层是 ...
- java hashset 实现_HashSet实现原理分析(Java源码剖析)
本文将深入讨论HashSet实现原理的源码细节.在分析源码之前,首先我们需要对HashSet有一个基本的理解. HashSet只存储不同的值,set中是不会出现重复值的. HashSet和HashMa ...
- Java学习笔记17:Java_Set集合_TreeSet集合_二叉树_HashSet集合
文章目录 1.Set集合 1.1Set集合概述和特点[应用] 1.2Set集合的使用[应用] 2.TreeSet集合 2.1TreeSet集合概述和特点[应用] 2.2TreeSet集合基本使用[应用 ...
- 如何实现一个线程安全的 ConcurrentHashSet ?
咨询区 Sebastian 在 .NET 框架中并没有线程安全的 ConcurrentHashSet 类,我想模仿 ConcurrentDictionary 来实现一个,目前写了一下桩代码. publ ...
- lamda获取参数集合去空_JAVA集合框架知识
1. Vector用法和ArrayList区别 (1) Vector的特有方法有哪些? void addElement(E obj) 将指定的组件添加到此向量的末尾,将其大小增加1. (2) Vect ...
- java comparator_一个Java程序员的成长历程(012)天
第23次(容器) 学习主题:容器 学习目标: 1. 掌握Vector,以及与ArrayList的区别 2. 掌握Map接口下的HashMap和HashTable 对应视频: http://www.it ...
- 安卓高级面试知识整理
安卓高级面试知识整理 Android 四大组件:这是一份全面 & 详细的Activity学习指南 ...
- 1.12Java-集合
目录 1.12.1集合 1.12.1.1什么是集合 1.12.1.2集合体系 1.12.2Collection接口 1.12.2.1 Collection概述 1.12.2.2 Collection方 ...
- 第十二届_国赛蓝桥杯个人模板_基础篇
第十二届_国赛蓝桥杯个人模板_网格图_DFS/BFS篇 第十二届_国赛蓝桥杯个人模板_全排列_DFS/BFS篇 第十二届_国赛蓝桥杯个人模板_DP篇 第十二届_国赛蓝桥杯个人模板_数论篇 第十二届_国 ...
最新文章
- 零基础ui设计培训一定要知道字体设计规则
- 自动识别口罩佩戴模型在线教学,抗疫在家涨知识!
- Spring注解Annotation
- 【Python数据预处理】 归一化(按列减均值,除方差),标准化(按列缩放到指定范围),正则化(范数)
- Ant Design 使用小结
- java猴子吃香蕉_Java 猴子分香蕉
- 【代码笔记】Web-CSS-CSS Text(文本)
- 这个“十一”长假,你是背“锅”出行吗?
- ffmpeg主要数据结构及其之间的关系
- python 服务端渲染_详解React 服务端渲染方案完美的解决方案
- JAVA回合制pk游戏
- 求虐,我还想再拓展一次
- 直击备份恢复的痛点:基于 TiDB Binlog 的快速时间点恢复
- 计算机组成原理:中央处理器(2)
- 2017年下半年中学综合素质问答题
- GAMIT重新编译及升级
- 交通行业大数据应用和发展现状
- java的关键业绩指标_SpreadJS前端开发案例:如何利用Javasrcipt创建财务关键业绩指标表...
- (基于matlab自写代码)语音信号的线性预测
- PythonRedis 无序集合set、有序集合zset操作