如何在 C# 中创建哈希表集合?


哈希表是 C# 中的非泛型集合。它存储键值对,类似于泛型“字典”集合。哈希表定义在

System. Collections. namespace.

哈希表计算每个键的哈希码,并将其存储在不同的桶中。当访问值时,哈希码与指定键的哈希码进行匹配。因此,哈希表优化了查找。

在本教程中,我们将了解如何在 C# 中创建哈希表集合。

哈希表特性

在开始创建哈希表之前,让我们了解一下 C# 中哈希表集合的一些主要特性。

哈希表集合存储键值对。

哈希表是 C# 中 System.Collections 命名空间的一部分,并实现 IDictionary 接口。哈希表的元素存储为 DictionaryEntry 对象。

哈希表的键不能为 null,并且必须唯一。但是,值可以为 null 或重复。

可以使用索引器中的键访问哈希表中的值,就像访问数组值一样。

哈希表中的键是不可变对象。每个键对象都提供一个哈希函数。

典型的哈希表类实现 C# 的 IDictionary、ICollection、ISerializable、IEnumerable、IDeserializationCallback 和 ICloneable 接口。

存储在哈希表中的元素可以是相同类型或不同类型的。

记住这些主要特性,让我们现在讨论如何在 C# 中创建哈希表。

如何在 C# 中创建哈希表集合?

C# 的哈希表类提供 16 个重载的构造函数来创建哈希表。

下表显示了我们将在本文中使用的哈希表构造函数。

构造函数 描述
Hashtable() 初始化新的、空的哈希表类实例,具有默认的初始容量、哈希码提供程序、比较器和负载因子。
Hashtable(IDictionary) 创建一个新的哈希表类实例,并使用指定字典的内容对其进行初始化。

注意 - 要了解有关 C# 中哈希表类的更多信息,请阅读我们的文章 C# - 哈希表类。

让我们看看通常在 C# 中创建哈希表集合的步骤。

首先,我们在程序中包含 System.Collections 命名空间

using System. Collections;

接下来,我们使用 Hashtable 类创建一个哈希表。为此,我们使用默认构造函数。

Hashtable hashtable_name = new Hashtable();

现在我们可以使用“Add()”方法向哈希表添加元素。

因此,我们可以在创建哈希表实例时初始化整个哈希表,也可以使用 Add() 方法逐个向哈希表添加元素。

示例 1

下面的程序演示了在 C# 中创建哈希表。

using System;
using System. Collections;
class MyHashTable {
   // Main Method
   static public void Main() {

      // Create hashtable using the default constructor
      Hashtable indianNumberSystem = new Hashtable();
      
      //add a key/value pair using the Add() method
      indianNumberSystem.Add(1,"Ones"); 
      indianNumberSystem.Add(10,"Tens");
      indianNumberSystem.Add(100,"Hundred");
      indianNumberSystem.Add(1000,"Thousand");
      indianNumberSystem.Add(10000,"Ten Thousand");
      indianNumberSystem.Add(100000,"Lac");
      indianNumberSystem.Add(1000000,"Ten Lac");
      indianNumberSystem.Add(10000000,"Crore");
      
      //display HashTable contents
      Console.WriteLine("Key, Value pairs from Indian Number System:");
      foreach(DictionaryEntry ele1 in indianNumberSystem){
         Console.WriteLine("{0} ({1}) ", ele1.Key, ele1.Value);
      }      
   }
}

在上面的程序中,我们使用默认构造函数定义了一个哈希表实例。然后,我们使用Add()方法向哈希表添加键值对。最后,使用 for-each 循环逐个打印哈希表内容。

输出

上面的程序生成以下输出。

Key, Value pairs from Indian Number System:
100 (Hundred) 
1000 (Thousand) 
10 (Tens) 
1000000 (Ten Lac) 
100000 (Lac) 
10000000 (Crore) 
10000 (Ten Thousand) 
1 (Ones)

该程序显示了一个包含印度数字系统位值的哈希表。请注意,由于这是一个简单的创建哈希表并向其中添加内容的程序,因此输出未格式化。

示例 2

让我们来看另一个在 C# 中创建哈希表的例子。下面的程序使用不同的构造函数来创建哈希表。

using System;
using System.Collections;
class MyHashTable {
   // Main Method
   static public void Main() {

      // Create hashtable without using Add method
      Hashtable my_hashtable1 = new Hashtable() {{"K1", "New York"}};

      // Adding key/value pair in the hashtable using Add() method
      my_hashtable1.Add("K2", "Paris");
      my_hashtable1.Add("K3", "London");
      my_hashtable1.Add("K4", "Mumbai");
      my_hashtable1.Add("K5", "Berlin");
      
      Console.WriteLine("Key, Value pairs from my_hashtable1:");
      foreach(DictionaryEntry ele1 in my_hashtable1){
         Console.WriteLine("{0} and {1} ", ele1.Key, ele1.Value);
      }      
   }
}

正如我们在上面的代码中看到的,我们首先创建一个包含一对键值对的哈希表对象。然后,我们使用哈希表类的add()方法向哈希表添加元素。最后,我们使用 for-each 循环遍历哈希表对象以打印每个哈希表元素(键值对)。

输出

上面的程序产生以下输出。

Key, Value pairs from my_hashtable1:
K2 and Paris 
K1 and New York 
K3 and London 
K4 and Mumbai 
K5 and Berlin 

在上面的输出中,键值对按值的逆字母顺序显示。这是哈希表的默认输出,因为我们没有提供任何代码来格式化输出。哈希表类提供各种方法来组织/格式化输出,我们将在后续教程中学习。

在本教程中,我们讨论了如何在 C# 中创建哈希表集合。哈希表是一个非泛型的键值对集合。哈希表中的键是唯一、非 null 值。值可以为 null 并重复。我们可以使用 System.Collections 接口提供的哈希表类在 C# 中创建哈希表,并使用该类提供的各种方法对其进行修改。

更新于:2022-12-14

浏览量 160 次

启动您的职业生涯

完成课程获得认证

开始
广告