HashTable Dictionary HashMap

本文为作者原创,转载请注明出处:https://www.cnblogs.com/zhaoqingqing/p/3951031.html



HashTable和HashMap#

脑海中一直存在两个Hash,一个是HashMap另一个是HashTable,今天来总结一下两者的区别

相同点:表示根据键的哈希代码进行组织的键/值对的集合,哈希表也叫散列表。

区别:HashMap在C#中不存在的,而是在Java中

1.C#每一个元素都是存储在DictionaryEntry对象中的键/值对,键不能为 null,但值可以。

2.在Java的HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示HashMap中没有该键,也可以表示该键所对应的值为null。

因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键,而应该用containsKey()方法来判断

HashTable示例#

using System;
using System.Collections;
 
namespace MyCollection
{
    public class HashTableExample
    {
        public static void Main()
        {
            // Create a new hash table.
            Hashtable openWith = new Hashtable();
 
            // key没有重复, 但是value有重复.
            openWith.Add("txt", "notepad.exe");
            openWith.Add("bmp", "paint.exe");
            openWith.Add("dib", "paint.exe");
            openWith.Add("rtf", "wordpad.exe");
 
            //如果key重复,进行catch处理
            try
            {
                openWith.Add("txt", "winword.exe");
            }
            catch
            {
                Console.WriteLine("An element with Key = \"txt\" already exists.");
            }
 
            // 通过key获取value
            Console.WriteLine("For key = \"rtf\", value = {0}.", openWith["rtf"]);
 
            //替换value
            openWith["rtf"] = "winword.exe";
            Console.WriteLine("For key = \"rtf\", value = {0}.", openWith["rtf"]);
 
            //遍历HashTable
            foreach (DictionaryEntry de in openWith)
            {
                Console.WriteLine(de.Key);
            }
 
            //获取Keys
            ICollection keCollection = openWith.Keys;
            foreach (string s in keCollection)
            {
                Console.WriteLine("key = {0}",s);
            }
 
            //删除指定的key
            openWith.Remove("doc");
            if (!openWith.Contains("doc"))
            {
                Console.WriteLine("Key\"doc\" is not found");
            }
        }
    }
}

运行结果#

image

HashTable和Dictionary#

示例代码#

using System;
using System.Collections;
using System.Collections.Generic;
 
 
namespace MyCollection
{
    class HashTableDictionary
    {
        static void Main(string[] args)
        {
            Hashtable hashtable = new Hashtable();
            hashtable.Add("8","Name8");
            hashtable.Add("2", "Name5");
            hashtable.Add("5", "Name2");
            hashtable.Add("1", "Name1");
            foreach (var hash in hashtable.Keys)
            {
                Console.WriteLine(hash.ToString());
            }
            Console.WriteLine();
 
            Dictionary<int,string> dict = new Dictionary<int, string>();
            dict.Add(8, "Name8");
            dict.Add(2, "Name5");
            dict.Add(5, "Name2");
            dict.Add(1, "Name1");
            foreach (var _dict1 in dict.Keys)
            {
                Console.WriteLine(_dict1);
            }
 
            Console.WriteLine();
            Dictionary<string, string> dict2 = new Dictionary<string, string>();
            dict2.Add("8", "Name8");
            dict2.Add("2", "Name5");
            dict2.Add("5", "Name2");
            dict2.Add("1", "Name1");
            foreach (var _dict2 in dict2.Keys)
            {
                Console.WriteLine(_dict2);
            }
        }
    }
}
 

运行结果#

image

作者:赵青青   一名在【网易游戏】做游戏开发的程序员,擅长Unity3D,游戏开发,.NET等领域。
本文版权归作者和博客园共有,欢迎转载,转载之后请务必在文章明显位置标出原文链接和作者,谢谢。
如果本文对您有帮助,请点击【推荐】您的赞赏将鼓励我继续创作!想跟我一起进步么?那就【关注】我吧。
posted @   赵青青  阅读(2526)  评论(2编辑  收藏  举报
编辑推荐:
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
阅读排行:
· 10亿数据,如何做迁移?
· 推荐几款开源且免费的 .NET MAUI 组件库
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 易语言 —— 开山篇
· Trae初体验
历史上的今天:
2013-09-02 Unity3D FPS帧数修改
2013-09-02 Unity游戏暂停之Update与FixedUpdate区别
CONTENTS
点击右上角即可分享
微信分享提示