• c# 哈希表(Hash Table)


            在 C# 中,哈希表(Hash Table)是一种基于哈希函数实现的数据结构,用于存储键值对。哈希表允许快速插入、删除和查找操作,其性能通常比线性数据结构(如数组或链表)更优秀,特别在大数据集时效果明显。

            在哈希表中,每个键都经过哈希函数计算得到一个哈希码(hash code),然后根据哈希码确定其在内部数据结构中的存储位置。这使得在理想情况下,我们可以在常数时间内访问、插入或删除键值对。然而,由于哈希碰撞(即不同键具有相同哈希码)的存在,实际实现中需要解决冲突的问题,常见的方法包括开放寻址法和链表法。

            在 C# 中,哈希表通常通过 `Dictionary` 泛型类实现。`Dictionary` 在内部使用哈希表作为存储结构,允许快速查找和操作其键值对。除了 `Dictionary`,C# 中还有其他一些实现哈希表的类,例如 `Hashtable` 类,但 `Dictionary` 更常用、更推荐使用。

            哈希表在 C# 中是一种常用的数据结构,用于高效地存储和查找键值对。开发者可以利用哈希表的快速查找特性来提升程序的性能。

    示例一 使用 `Dictionary` 类来实现哈希表:

    using System;
    using System.Collections.Generic;

    class Program
    {
        static void Main()
        {
            // 创建一个 Dictionary 实例
            Dictionary hashTable = new Dictionary();

            // 添加键值对到哈希表
            hashTable.Add("apple", 10);
            hashTable.Add("banana", 5);
            hashTable.Add("orange", 8);

            // 获取和打印值
            Console.WriteLine("Number of apples: " + hashTable["apple"]);
            Console.WriteLine("Number of bananas: " + hashTable["banana"]);
            Console.WriteLine("Number of oranges: " + hashTable["orange"]);

            // 检查键是否存在
            if (hashTable.ContainsKey("kiwi"))
            {
                Console.WriteLine("Number of kiwis: " + hashTable["kiwi"]);
            }
            else
            {
                Console.WriteLine("Kiwi not found in the hash table.");
            }
        }
    }
            在这个示例中,创建了一个 `Dictionary` 实例 `hashTable`,并向其中添加了几个键值对。然后使用键来获取和打印相应的值,并演示如何检查某个键是否存在于哈希表中。

    示例二 使用 `Hashtable` 类:

    //C#程序来说明如何
    //创建哈希表
    using System;
    using System.Collections;
     
    class GFG {
     
        // Main Method
        static public void Main()
        {
     
            //创建哈希表
            //使用Hashtable类
            Hashtable my_hashtable1 = new Hashtable();
     
            // Adding key/value pair 
            // in the hashtable
            // Using Add() method
            my_hashtable1.Add("A1", "Welcome");
            my_hashtable1.Add("A2", "to");
            my_hashtable1.Add("A3", "GeeksforGeeks");
     
            Console.WriteLine("Key and Value pairs from my_hashtable1:");
     
            foreach(DictionaryEntry ele1 in my_hashtable1)
            {
                Console.WriteLine("{0} and {1} ", ele1.Key, ele1.Value);
            }
     
            //创建另一个哈希表
            //使用Hashtable类
            //以及添加键/值对
            //不使用Add方法
            Hashtable my_hashtable2 = new Hashtable() {
                                          {1, "hello"},
                                              {2, 234},
                                            {3, 230.45},
                                             {4, null}};
     
            Console.WriteLine("Key and Value pairs from my_hashtable2:");
     
            foreach(var ele2 in my_hashtable2.Keys)
            {
                Console.WriteLine("{0}and {1}", ele2,
                                my_hashtable2[ele2]);
            }
        }

    输出:

    Key and Value pairs from my_hashtable1:
    A3 and GeeksforGeeks 
    A2 and to 
    A1 and Welcome 
    Key and Value pairs from my_hashtable2:
    4and 
    3and 230.45
    2and 234
    1and hello

    如何从哈希表中删除元素:
    在哈希表中,您可以从哈希表中删除元素。Hashtable 类提供了两种不同的方法来删除元素,方法是:

    Clear:此方法用于从哈希表中删除所有对象。
    Remove:此方法用于从哈希表中删除具有指定键的元素。

    my_hashtable.Clear();

    my_hashtable.Clear(); 

    如何检查哈希表中键/值对的可用性:
    在哈希表中,您可以使用以下方法检查给定的对是否存在:

    Contains:此方法用于检查 Hashtable 是否包含特定键。
    ContainsKey:此方法还用于检查 Hashtable 是否包含特定键。
    ContainsValue:此方法用于检查 Hashtable 是否包含特定值。

    Console.WriteLine(my_hashtable.Contains("A3"));
    Console.WriteLine(my_hashtable.Contains(12));
    Console.WriteLine();

    Console.WriteLine(my_hashtable.ContainsKey("A1"));
    Console.WriteLine(my_hashtable.ContainsKey(1));
    Console.WriteLine();

    Console.WriteLine(my_hashtable.ContainsValue("geeks"));
    Console.WriteLine(my_hashtable.ContainsValue("to"));
    Console.WriteLine();

    如何更新哈希表:
    在 C# 中,Hashtable 类不提供直接方法来更新现有键的值。但是,您可以通过以下步骤实现更新:

    使用 ContainsKey 方法检查哈希表中是否存在该键。
    如果该键存在,则使用该键检索当前值并将其存储在变量中。
    使用相同的键将新值分配给哈希表中的键。
    或者,如果需要,可以删除旧的键/值对。

    using System;
    using System.Collections.Generic;
     
    class Program
    {
        static void Main()
        {
            //创建字典
            Dictionary dictionary = new Dictionary();
             
            //添加一些键值对
            dictionary.Add("key1", "value1");
            dictionary.Add("key2", "value2");
     
            //更新现有key的值
            string keyToUpdate = "key1";
            if (dictionary.ContainsKey(keyToUpdate))
            {
                dictionary[keyToUpdate] = "updatedValue";
            }
     
            //访问更新的值
            string updatedValue;
            if (dictionary.TryGetValue(keyToUpdate, out updatedValue))
            {
                Console.WriteLine("Updated value: " + updatedValue);
            }
     
            //打印字典中的所有键值对
            foreach (KeyValuePair kvp in dictionary)
            {
                Console.WriteLine("Key: " + kvp.Key + ", Value: " + kvp.Value);
            }
        }
    }

    希望以上示例能帮助你了解如何在 C# 中使用哈希表。

  • 相关阅读:
    java网络编程
    RabbitMQ笔记(交换机,发布确认,延时队列,死信队列,整合SpringBoot)
    Allegro Design Entry HDL(OrCAD Capture HDL)显示管理菜单详细介绍
    基于Java毕业设计定西扶贫惠农推介系统源码+系统+mysql+lw文档+部署软件
    凭借这份180道最全高级岗面试题及答案,成功入职,美团定级T4
    物联网应用-分布式对象储存工具-MinIO 对象存储win部署及使用
    HTML学习大纲
    CAPL学习之路-DoIP相关函数
    java应用提速(速度与激情)
    第三章:SQL聚合与排序
  • 原文地址:https://blog.csdn.net/hefeng_aspnet/article/details/136224031