iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C#中Hashtable和Dictionary的区别与用法示例
  • 844
分享到

C#中Hashtable和Dictionary的区别与用法示例

2024-04-02 19:04:59 844人浏览 独家记忆
摘要

前言 在.net Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似keyvalue的键值对,其中key通常可用

前言

.net Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似keyvalue的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。Hashtable中keyvalue键值对均为object类型,所以Hashtable可以支持任何类型的keyvalue键值对.

Hashtable与Dictionary,都是key/value键值对的形式,区别在于Hashtable的键值是object(DictionaryEntry),值类型,数据排列是乱序的;而Dictionary是泛型(KeyValuePair<T, T>),引用类型,按插入顺序排列数据

Hashtable和Dictionary都是.Net下的表示键值对的集合,那么我们在使用中该选择Hashtable还是Dictionary?

下边我们看看他们之间的区别:

1、Dictionary<K,V>在使用中是顺序存储的,而Hashtable由于使用的是哈希算法进行数据存储,是无序的。

2、Dictionary的key和value是泛型存储,Hashtable的key和value都是object

3、Dictionary是泛型存储,不需要进行类型转换,Hashtable由于使用object,在存储或者读取值时都需要进行类型转换,所以比较耗时

4、单线程程序中推荐使用 Dictionary, 有泛型优势, 且读取速度较快, 容量利用更充分。多线程程序中推荐使用 Hashtable, 默认的 Hashtable 允许单线程写入, 多线程读取, 对 Hashtable 进一步调用 Synchronized() 方法可以获得完全线程安全的类型. 而 Dictionary 非线程安全, 必须人为使用 lock 语句进行保护, 效率大减。

5、在通过代码测试的时候发现key是整数型Dictionary的效率比Hashtable快,如果key是字符串型,Dictionary的效率没有Hashtable快。

对于如何进行选择,个人倾向于使用Dictionary,原因是:

1、Dictionary是可排序的,Hashtable如果想排序还需要采用别的方式进行

2、Dictionary有泛型优势,效率要高

Hashtable用法举例:


            Hashtable hashtable = new Hashtable();
            hashtable.Add("id", "BH0001");
            hashtable.Add("name", "TM");
            hashtable.Add("sex", "男");
            Console.WriteLine("\t 键\t 值");
            foreach (DictionaryEntry dicEntry in hashtable)
                Console.WriteLine("\t " + dicEntry.Key + "\t " + dicEntry.Value);

运行结果:

Dictionary用法举例:


            Dictionary<string,string> dictionary = new Dictionary<string, string>();
            dictionary.Add("id", "BH0001");
            dictionary.Add("name", "TM");
            dictionary.Add("sex", "男");
            Console.WriteLine("\t 键\t 值");
            foreach (var dic in dictionary)
                Console.WriteLine("\t " + dic.Key + "\t " + dic.Value);

运行结果:

C# .net 3.5 以上的版本引入 Linq 后,字典Dictionary排序变得十分简单,用一句类似 sql 数据库查询语句即可搞定;不过,.net 2.0 排序要稍微麻烦一点。下面举例说明dictionary的排序方法:

dictionary按值value排序


Dictionary<string, int> dic = new Dictionary<string, int>();
  dic.Add("index.html", 50);
  dic.Add("product.html", 13);
  dic.Add("aboutus.html", 4);
  dic.Add("online.aspx", 22);
  dic.Add("news.aspx", 18);
private static void DictonarySort(Dictionary<string, int> dic)
        {
            var dicSort = from objDic in dic orderby objDic.Value descending select objDic;
            foreach (KeyValuePair<string, int> kvp in dicSort)
                Console.WriteLine(kvp.Key + ":" + kvp.Value );
        }

 排序结果:

  index.html:50
  online.aspx:22
  news.aspx:18
  product.html:13
  aboutus.html:4

上述代码是按降序(倒序)排列,如果想按升序(顺序)排列,只需要把变量 dicSort 右边的 descending 去掉即可。

C# dictionary key 排序

如果要按 Key 排序,只需要把变量 dicSort 右边的 objDic.Value 改为 objDic.Key 即可。

总结

到此这篇关于C#中Hashtable和Dictionary的区别与用法的文章就介绍到这了,更多相关C# Hashtable和Dictionary区别内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C#中Hashtable和Dictionary的区别与用法示例

本文链接: https://www.lsjlt.com/news/126583.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C#中Hashtable和Dictionary的区别与用法示例
    前言 在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似keyvalue的键值对,其中key通常可用...
    99+
    2022-11-12
  • C#中Hashtable和Dictionary有什么区别
    这篇文章给大家介绍C#中Hashtable和Dictionary有什么区别,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Dictionary<K,V>在使用中是顺序存储的,而Hashtable由于使用的是哈...
    99+
    2023-06-15
  • c#中task与thread区别及其使用的方法示例
    目录1.什么是thread2.什么是task3.创建一个task任务有两种模式:1.什么是thread 当我们提及多线程的时候会想到thread和threadpool,这都是异步操作...
    99+
    2022-11-13
  • C#与C++枚举的区别对比和使用案例
    C++与C#中枚举的区别 一、C++ 枚举类型中的每个元素,可以直接使用,不必通过类型.元素的方式调用没有++操作 #include <iostream> using n...
    99+
    2022-11-13
  • C#中DataSet,DataTable,DataView的区别与用法
    一、创建Dataset和DataTable DataSet ds = new DataSet();//DataSetName默认为"NewDataSet" DataTable tab...
    99+
    2022-11-13
  • C语言中break与continue的用法和区别详解
    目录前言一、循环体中两者的作用1.while循环2.for循环3.do while循环二、switch语句总结前言 本文将通过简单的实例来详细分析在C语言中break语句和conti...
    99+
    2022-11-12
  • 详解C语言中typedef和#define的用法与区别
    目录一、typedef的用法二、#define的用法三、typedef与#define的区别四、typedef的用途用途一用途二用途三用途四五、typedef的陷阱陷阱一陷阱二一、t...
    99+
    2022-11-13
  • 实例详解C++中指针与引用的区别
    目录前言1、指针的声明2、使用new来分配内存3、malloc 与 new 的区别4、引用的声明与本质总结前言 在计算机存储数据时必须要知道三个基本要素:信息存储在何处?存储的值为多...
    99+
    2022-11-12
  • Mongoose中document与object的区别示例详解
    前言 本文主要给大家总结介绍了关于Mongoose中document与object区别的相关内容,分享出来供大家参考学习,其实这个问题其实是mongoose非常常见的问题,经常有很多以前没遇到这个问题的人都...
    99+
    2022-06-04
    示例 详解 区别
  • Vue3.0中Ref与Reactive的区别示例详析
    目录Ref与Reactive Ref ReactiveRef与Reactive的区别 shallowRef 与shallowReactive toRaw ---只修改数据不渲染页面 ...
    99+
    2022-11-12
  • C++中nullptr 和 NULL 的区别及用法
    1. 为什么会有nullptr的出现 目的:nullptr的出现主要是为了替代NULL。 那么,为什么要替代NULL呢? 在NULL的定义中存在会有2种方式,有的编译器会将NULL定...
    99+
    2022-11-12
  • C++指针与引用的区别案例详解
    C++中指针和引用的区别 从概念上讲。指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变。 而引用是...
    99+
    2022-11-12
  • java中类方法与实例方法的区别
    一、类方法类方法是静态方法,前面需要有static修饰符修饰。类方法内不能涉及有关变量的内容。不能调用类的对象方法不能引用对象变量类方法不能被重写(覆盖)类方法不能使用super, this关键字二、实例方法可以调用类的对象方法可以引用对象...
    99+
    2020-02-10
    java基础 java 类方法 实例方法 区别
  • Java中CyclicBarrier和CountDownLatch的用法与区别
    目录前言CountDownLatch例子CyclicBarrier构造函数例子两者区别前言 CyclicBarrier和CountDownLatch这两个工具都是在java.util...
    99+
    2022-11-12
  • select_related和prefetch_related的用法与区别
    0. 本文借助django-debug-toolbar来展现效果 (19条消息) django-debug-toolbar的安装_骑台风走的博客-CSDN博客https://blog.csdn.net/qq_52385631/article...
    99+
    2023-09-02
    数据库 sql mysql
  • C#中的Task.Delay()和Thread.Sleep()区别(代码案例)
    一、简介 1.Thread.Sleep()是同步延迟,Task.Delay()是异步延迟。 2.Thread.Sleep()会阻塞线程,Task.Delay()不会。 3.Threa...
    99+
    2022-11-12
  • React中State与Props区别和用法
    本篇内容介绍了“React中State与Props区别和用法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!...
    99+
    2022-10-19
  • java中静态方法与实例方法的区别
    静态方法和实例方法的区别主要体现在两个方面: 在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。 静态方法在访问本类的成员时,只允许...
    99+
    2021-03-20
    java 静态方法 实例方法 区别
  • C#中Abstract方法和Virtual方法的区别
    简介: c#中Abstract和Virtual比较容易混淆,都与继承有关,并且涉及override的使用。virtual可以被子类重写,而abstract必须被子类重写。virtua...
    99+
    2022-11-13
  • Java中class和Class的区别示例详解
    目录一.class与Class区别二.Class介绍三.如何得到Class对象1.通过getClass()方法获取到Class对象2.通过forName()方法获取到Class对象3...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作