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相关推荐

  1. Java实现二树杈_HashSet的hashCode方法和equals方法的重写,TreeSet中compareTo方法的重写,Comparator在treeSet中的应用。...

    HashSet的hashCode方法和equals方法的重写,TreeSet中compareTo方法的重写,Comparator在treeSet中的应用. HashSet: 首先,hashset底层是 ...

  2. java hashset 实现_HashSet实现原理分析(Java源码剖析)

    本文将深入讨论HashSet实现原理的源码细节.在分析源码之前,首先我们需要对HashSet有一个基本的理解. HashSet只存储不同的值,set中是不会出现重复值的. HashSet和HashMa ...

  3. Java学习笔记17:Java_Set集合_TreeSet集合_二叉树_HashSet集合

    文章目录 1.Set集合 1.1Set集合概述和特点[应用] 1.2Set集合的使用[应用] 2.TreeSet集合 2.1TreeSet集合概述和特点[应用] 2.2TreeSet集合基本使用[应用 ...

  4. 如何实现一个线程安全的 ConcurrentHashSet ?

    咨询区 Sebastian 在 .NET 框架中并没有线程安全的 ConcurrentHashSet 类,我想模仿 ConcurrentDictionary 来实现一个,目前写了一下桩代码. publ ...

  5. lamda获取参数集合去空_JAVA集合框架知识

    1. Vector用法和ArrayList区别 (1) Vector的特有方法有哪些? void addElement(E obj) 将指定的组件添加到此向量的末尾,将其大小增加1. (2) Vect ...

  6. java comparator_一个Java程序员的成长历程(012)天

    第23次(容器) 学习主题:容器 学习目标: 1. 掌握Vector,以及与ArrayList的区别 2. 掌握Map接口下的HashMap和HashTable 对应视频: http://www.it ...

  7. 安卓高级面试知识整理

                                                    安卓高级面试知识整理 Android 四大组件:这是一份全面 & 详细的Activity学习指南 ...

  8. 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方 ...

  9. 第十二届_国赛蓝桥杯个人模板_基础篇

    第十二届_国赛蓝桥杯个人模板_网格图_DFS/BFS篇 第十二届_国赛蓝桥杯个人模板_全排列_DFS/BFS篇 第十二届_国赛蓝桥杯个人模板_DP篇 第十二届_国赛蓝桥杯个人模板_数论篇 第十二届_国 ...

最新文章

  1. 零基础ui设计培训一定要知道字体设计规则
  2. 自动识别口罩佩戴模型在线教学,抗疫在家涨知识!
  3. Spring注解Annotation
  4. 【Python数据预处理】 归一化(按列减均值,除方差),标准化(按列缩放到指定范围),正则化(范数)
  5. Ant Design 使用小结
  6. java猴子吃香蕉_Java 猴子分香蕉
  7. 【代码笔记】Web-CSS-CSS Text(文本)
  8. 这个“十一”长假,你是背“锅”出行吗?
  9. ffmpeg主要数据结构及其之间的关系
  10. python 服务端渲染_详解React 服务端渲染方案完美的解决方案
  11. JAVA回合制pk游戏
  12. 求虐,我还想再拓展一次
  13. 直击备份恢复的痛点:基于 TiDB Binlog 的快速时间点恢复
  14. 计算机组成原理:中央处理器(2)
  15. 2017年下半年中学综合素质问答题
  16. GAMIT重新编译及升级
  17. 交通行业大数据应用和发展现状
  18. java的关键业绩指标_SpreadJS前端开发案例:如何利用Javasrcipt创建财务关键业绩指标表...
  19. (基于matlab自写代码)语音信号的线性预测
  20. PythonRedis 无序集合set、有序集合zset操作

热门文章

  1. zynq学习02 新建一个Helloworld工程
  2. 一个电子工程师的经验之谈!
  3. python re.match、re.search以及re.findall的区别
  4. python 可以 从视频中 直接剪辑音频出来(亲测MP4)
  5. 使用Python将PDF转成文档
  6. 寒冬中的半个月前端面试
  7. 只此一招,全屏操作从此易如反掌
  8. Lua基本语法-lua与C#的交互(相当简单详细的例子)
  9. 梁胜博士亲解Rancher 2.0:K8s之上的Rancher魔法
  10. 2016 、12 、11本周