当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C# HashSet用法及代码示例


HashSet<T> 是唯一元素的无序集合。它位于 System.Collections.Generic 命名空间下。它用于我们想要防止在集合中插入重复项的情况。就性能而言,与列表相比要好一些。

HashSet 类的特征:

  • 哈希集<T> 类提供高性能的集合操作。集合是不包含重复元素的集合,并且其元素没有特定的顺序。
  • HashSet的容量<T> object 是对象可以容纳的元素数量。
  • 哈希集<T> 随着向对象添加元素,对象的容量会自动增加。
  • 哈希集<T> 集合未排序且不能包含重复元素。
  • 哈希集<T> 提供许多数学集合运算,例如集合加法(并集)和集合减法。

Constructors

构造函数 说明
HashSet() 初始化 HashSet 类的新实例,该实例为空,并使用集合类型的默认相等比较器。
HashSet(IEnumerable) 初始化 HashSet 类的新实例,该实例使用集合类型的默认相等比较器,包含从指定集合复制的元素,并且具有足够的容量来容纳复制的元素数量。
HashSet(IEnumerable, IEqualityComparer) 初始化 HashSet 类的新实例,该实例使用集合类型的指定相等比较器,包含从指定集合复制的元素,并且具有足够的容量来容纳复制的元素数量。
HashSet(IEqualityComparer) 初始化 HashSet 类的一个新实例,该实例为空,并为集合类型使用指定的相等比较器。
哈希集(Int32) 初始化 HashSet 类的新实例,该实例为空,但为容量项保留了空间,并使用集合类型的默认相等比较器。
HashSet(Int32, IEqualityComparer) 初始化 HashSet 类的新实例,该实例使用集合类型的指定相等比较器,并具有足够的容量来容纳容量元素。
HashSet(SerializationInfo, StreamingContext) 使用序列化数据初始化 HashSet 类的新实例。

例子:


// C# code to create a HashSet 
using System; 
using System.Collections.Generic; 
  
class GFG { 
  
    // Driver code 
    public static void Main() 
    { 
  
        // Creating a HashSet of odd numbers 
        HashSet<int> odd = new HashSet<int>(); 
  
        // Inserting elements in HashSet 
        for (int i = 0; i < 5; i++) { 
            odd.Add(2 * i + 1); 
        } 
  
        // Displaying the elements in the HashSet 
        foreach(int i in odd) 
        { 
            Console.WriteLine(i); 
        } 
    } 
} 

输出:

1
3
5
7
9

Properties

属性 说明
Comparer 获取 IEqualityComparer 对象,该对象用于确定集中值的相等性。
Count 获取集合中包含的元素数。

例子:


// C# code to get the number of 
// elements that are contained in HashSet 
using System; 
using System.Collections.Generic; 
  
class GFG { 
  
    // Driver code 
    public static void Main() 
    { 
  
        // Creating a HashSet of integers 
        HashSet<int> mySet = new HashSet<int>(); 
  
        // Inserting elements in HashSet 
        for (int i = 0; i < 5; i++) { 
            mySet.Add(i * 2); 
        } 
  
        // To get the number of 
        // elements that are contained in HashSet 
        Console.WriteLine(mySet.Count); 
    } 
} 

输出:

5

Methods

方法 说明
Add(T) 将指定元素添加到集合中。
Clear() 从 HashSet 对象中删除所有元素。
Contains(T) 确定HashSet对象是否包含指定元素。
CopyTo() 将 HashSet 集合的元素复制到数组中。
CreateSetComparer() 返回一个 IEqualityComparer 对象,该对象可用于 HashSet 对象的相等性测试。
Equals(Object) 确定指定对象是否等于当前对象。
ExceptWith(IEnumerable) 从当前 HashSet 对象中删除指定集合中的所有元素。
GetEnumerator() 返回一个迭代 HashSet 对象的枚举器。
GetHashCode() 用作默认的哈希函数。
GetObjectData(SerializationInfo, StreamingContext) 实现 ISerialized 接口并返回序列化 HashSet 对象所需的数据。
GetType() 获取当前实例的类型。
IntersectWith(IEnumerable) 修改当前HashSet对象以仅包含该对象和指定集合中存在的元素。
IsProperSubsetOf(IEnumerable) 确定HashSet对象是否是指定集合的真子集。
IsProperSupersetOf(IEnumerable) 确定 HashSet 对象是否是指定集合的真超集。
IsSubsetOf(IEnumerable) 确定 HashSet 对象是否是指定集合的子集。
IsSupersetOf(IEnumerable) 确定 HashSet 对象是否是指定集合的超集。
MemberwiseClone() 创建当前对象的浅拷贝。
OnDeserialization(Object) 实现 ISerialized 接口并在反序列化完成时引发反序列化事件。
Overlaps(IEnumerable) 确定当前HashSet对象和指定集合是否共享公共元素。
Remove(T) 从 HashSet 对象中删除指定元素。
RemoveWhere(Predicate) 从 HashSet 集合中删除与指定谓词定义的条件匹配的所有元素。
SetEquals(IEnumerable) 确定HashSet对象和指定集合是否包含相同的元素。
SymmetricExceptWith(IEnumerable) 修改当前HashSet对象以仅包含该对象或指定集合中存在的元素,但不能同时包含两者中存在的元素。
ToString() 返回表示当前对象的字符串。
TrimExcess() 将 HashSet 对象的容量设置为其包含的实际元素数,四舍五入为附近的特定于实现的值。
TryGetValue(T, T) 在集合中搜索给定值并返回找到的相等值(如果有)。
UnionWith(IEnumerable) 修改当前HashSet对象以包含其自身、指定集合或两者中存在的所有元素。

例子:


// C# code to Check if a HashSet is 
// a subset of the specified collection 
using System; 
using System.Collections.Generic; 
  
class GFG { 
  
    // Driver code 
    public static void Main() 
    { 
  
        // Creating a HashSet of integers 
        HashSet<int> mySet1 = new HashSet<int>(); 
  
        // Inserting elements in HashSet 
        // mySet1 only contains even numbers less than 
        // equal to 10 
        for (int i = 1; i <= 5; i++) 
            mySet1.Add(2 * i); 
  
        // Creating a HashSet of integers 
        HashSet<int> mySet2 = new HashSet<int>(); 
  
        // Inserting elements in HashSet 
        // mySet2 contains all numbers from 1 to 10 
        for (int i = 1; i <= 10; i++) 
            mySet2.Add(i); 
  
        // Check if a HashSet mySet1 is a subset 
        // of the HashSet mySet2 
        Console.WriteLine(mySet1.IsSubsetOf(mySet2)); 
    } 
} 

输出:

True

例子:


// C# code to check if a HashSet 
// contains the specified element 
using System; 
using System.Collections.Generic; 
  
class GFG { 
  
    // Driver code 
    public static void Main() 
    { 
  
        // Creating a HashSet of strings 
        HashSet<string> mySet = new HashSet<string>(); 
  
        // Inserting elements in HashSet 
        mySet.Add("DS"); 
        mySet.Add("C++"); 
        mySet.Add("Java"); 
        mySet.Add("JavaScript"); 
  
        // Check if a HashSet contains 
        // the specified element 
        if (mySet.Contains("Java")) 
            Console.WriteLine("Required Element is present"); 
        else
            Console.WriteLine("Required Element is not present"); 
    } 
} 

输出:

Required Element is present

参考:



相关用法


注:本文由纯净天空筛选整理自Sahil_Bansall大神的英文原创作品 C# | HashSet Class。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。