Directory 与 Hashtable 的性能比较

告别网络依赖:手把手教你制作可U盘携带的MuMu模拟器绿色便携版 本文详细介绍了如何将MuMu模拟器制作成U盘便携版,实现离线安装和即插即用功能。通过步骤解析、脚本定制和问题排查,帮助用户在不同设备间快速部署移动办公或游戏环境,彻底摆脱网络依赖。 阅读详情
  

在.net1.1里经常会使用到Hashtable,到里.net 2.0以后我发现有了一个很好用的IDictionary<TKey,TValue>实现类Dictionary<TKey,TValue>。但还是会担心Dictionary<TKey,TValue>的检索效率是否跟Hashtable相当,

据我了解ArrayList的检索效率是非常差的,BinarySearch也不如Hashtable.所以做了一个测试。

[c-sharp] view plain copy print ?
  1. class Program  
  2. {  
  3.     static void Main(string[] args)  
  4.     {  
  5.         IntTest();  
  6.   
  7.         StringTest();  
  8.   
  9.         IntTryGetValueTest();  
  10.   
  11.         Console.WriteLine("=========");  
  12.   
  13.         IntTest();  
  14.   
  15.         StringTest();  
  16.   
  17.         IntTryGetValueTest();  
  18.   
  19.         Console.ReadLine();  
  20.     }  
  21.   
  22.     static void IntTest()  
  23.     {  
  24.         IDictionary<int, int> id = new Dictionary<int, int>();  
  25.   
  26.         Hashtable ht = new Hashtable();  
  27.   
  28.         int count = 1000000;  
  29.   
  30.         for (int i = 0; i < count; i++)  
  31.         {  
  32.             id.Add(i, i);  
  33.   
  34.             ht.Add(i, i);  
  35.         }  
  36.         //////////////   
  37.         Stopwatch st = Stopwatch.StartNew();  
  38.   
  39.         for (int i = 0; i < count; i++)  
  40.         {                 
  41.             int str = id[i];                  
  42.         }  
  43.   
  44.         st.Stop();  
  45.   
  46.         Console.WriteLine(string.Format("int类型,Directory:{0}", st.ElapsedMilliseconds));  
  47.         //////////////   
  48.         st = Stopwatch.StartNew();  
  49.   
  50.         for (int i = 0; i < count; i++)  
  51.         {  
  52.             object obj = ht[i];  
  53.         }  
  54.   
  55.         st.Stop();  
  56.   
  57.         Console.WriteLine(string.Format("int类型,Hashtable:{0}", st.ElapsedMilliseconds));  
  58.     }  
  59.   
  60.     static void StringTest()  
  61.     {  
  62.         IDictionary<string, string> id = new Dictionary<string, string>();  
  63.   
  64.         Hashtable ht = new Hashtable();  
  65.   
  66.         int count = 1000000;  
  67.   
  68.         for (int i = 0; i < count; i++)  
  69.         {  
  70.             string str = i.ToString();  
  71.   
  72.             id.Add(str, str);  
  73.   
  74.             ht.Add(str, str);  
  75.         }  
  76.         //////////////   
  77.         Stopwatch st = Stopwatch.StartNew();  
  78.   
  79.         for (int i = 0; i < count; i++)  
  80.         {               
  81.            string i2 = id[i.ToString()];                  
  82.         }  
  83.   
  84.         st.Stop();  
  85.   
  86.         Console.WriteLine(string.Format("string类型,Directory:{0}", st.ElapsedMilliseconds));  
  87.         //////////////   
  88.         st = Stopwatch.StartNew();  
  89.   
  90.         for (int i = 0; i < count; i++)  
  91.         {  
  92.             object obj = ht[i.ToString()];  
  93.         }  
  94.   
  95.         st.Stop();  
  96.   
  97.         Console.WriteLine(string.Format("string类型,Hashtable:{0}", st.ElapsedMilliseconds));  
  98.   
  99.     }  
  100.   
  101.     static void IntTryGetValueTest()  
  102.     {  
  103.         IDictionary<int, int> id = new Dictionary<int, int>();  
  104.   
  105.         Hashtable ht = new Hashtable();  
  106.   
  107.         int count = 1000000;  
  108.   
  109.         for (int i = 0; i < count; i++)  
  110.         {  
  111.             id.Add(i, i);  
  112.   
  113.             ht.Add(i, i);  
  114.         }  
  115.         //////////////   
  116.         Stopwatch st = Stopwatch.StartNew();  
  117.   
  118.         for (int i = 0; i < count; i++)  
  119.         {  
  120.             int i2 = 0;  
  121.   
  122.             id.TryGetValue(i, out i2);  
  123.   
  124.         }  
  125.   
  126.         st.Stop();  
  127.   
  128.         Console.WriteLine(string.Format("IntTryGetValue,Directory:{0}", st.ElapsedMilliseconds));  
  129.         //////////////   
  130.         st = Stopwatch.StartNew();  
  131.   
  132.         for (int i = 0; i < count; i++)  
  133.         {  
  134.             object obj = ht[i];  
  135.         }  
  136.   
  137.         st.Stop();  
  138.   
  139.         Console.WriteLine(string.Format("int类型,Hashtable:{0}", st.ElapsedMilliseconds));  
  140.     }  
  141. }  

输出为:

int类型,Directory:49
int类型,Hashtable:254
string类型,Directory:1112
string类型,Hashtable:511
IntTryGetValue,Directory:50
int类型,Hashtable:251
=========
int类型,Directory:48
int类型,Hashtable:201
string类型,Directory:944
string类型,Hashtable:505
IntTryGetValue,Directory:51
int类型,Hashtable:167

~~~~~~~~~~~~~~~~~~·

从结果我们可以发现如果key是整数型Dictionary的效率比Hashtable快3到4倍,

如果key是字符串型,Dictionary的效率只有Hashtable的一半。

另外使用TryGetValue对效率没什么影响。

AI量化投资开源平台——Qlib(微矿)的学习使用笔记(随缘更新) Qlib 涵盖了量化投资的全过程,为用户的 AI 算法提供了高性能的底层基础架构,从框架设计上让用户可以更容易地应用 AI 算法来辅助解决量化投资的各个关键问题(例如 Alpha 预测,风险预测,市场动态性建模)。本文旨在记录一些面向初学者的基础内容。 阅读详情

相关推荐

VisionMaster图像源模块的5个隐藏功能:从自动切换到二次开发接口

本文深入解析了VisionMaster图像源模块的5个隐藏功能,从基础的自动切换与字符触发过滤,到高级的脚本扩展与基于COM组件的二次开发接口。这些功能能显著提升工业视觉项目的自动化水平、灵活性与系统集成能力,帮助开发者实现更高效的离线测试流水线和外部精确控制。

rgv23456789的博客 651

为什么HashTable慢? 它的并发度是什么? 那么ConcurrentHashMap并发度是什么?

Hashtable性能慢的原因在于全局锁、低并发性和扩容时的性能开销。通过引入分段锁和更细粒度的锁机制提高了并发性能,其默认并发度是 16,能够显著改善多线程环境下的执行效率。如果您有更多问题或者需要进一步的探讨,请随时问我!

java永无止境! 543

别再只放按钮了!巧用微信小程序‘长按识别’功能,打造无缝加群体验

本文深入探讨了微信小程序'长按识别'功能在社群运营中的创新应用,通过简化加群流程至一步操作,显著提升用户转化率。文章详细解析了技术实现细节、UI/UX设计策略,并对比了与企业微信API的适用场景,为开发者提供打造无缝加群体验的完整解决方案。

weixin_42627853的博客 434

java中的hashtable_全面解析java中的hashtable

Hashtables提供了一个很有用的方法可以使应用程序的性能达到最佳。Hashtables(哈希表)在计算机领域中已不 是一个新概念了。它们是用来加快计算机的处理速度的,用当今的标准来处理,速度非常慢,而它们可以让你在查询许多数据条目时,很快地找到一个特殊的条目。 尽管现代的机器速度已快了几千倍,但是为了得到应用程序的最佳性能,hashtables仍然是个很有用的方法。设想一下,你有一个包含约一...

weixin_30431923的博客 1250

CircuitBreaker Resilience4J 介绍

在分布式环境中,我们的应用可能会面临着各种各样的可恢复的异常(比如超时,网络环境异常),此时我们可以利用不断重试的方式来从异常中恢复(Retry Pattern),使整个集群正常运行。然而,也有一些异常比较顽固,突然发生,无法预测,而且很难恢复,并且还会导致级联失败(举个例子,假设一个服务集群的负载非常高,如果这时候集群的一部分挂掉了,还占了很大一部分资源,整个集群都有可能遭殃)。如果我们这时还是不断进行重试的话,结果大多都是失败的。

zzhongcy的专栏 3540

跨厂商网络设备的RADIUS认证:Windows NPS的兼容性与最佳实践

本文详细探讨了Windows NPS在多厂商网络环境中的RADIUS认证实践,特别针对华为、华三、思科等主流设备的兼容性问题提供解决方案。从基础配置到高级优化,涵盖VSA属性映射、认证协议选择及安全加固措施,帮助企业实现统一身份认证并提升网络安全性。

weixin_29213827的博客 421

HashTable 和 Dictionary<T,T>性能分析

每次运行程序的第一次添加和获取元素,耗时都比较高(原因不明,不吝赐教),但是不影响咋们分析 HashTable 和 Dictionary性能。在100个元素以下,对于数值型元素,HashTable性能明显优于Dictionary。在1000个元素左右,对于数值型元素,创建第一个对象时,HashTable性能优于Dictionary。在10000个元素以上,对于数值型元素,Dictionary性能优于HashTable。

ts16dmy的博客 418

YOLOv11改进 | 注意力篇 | YOLOv11引入CBAM注意力机制

我们的实验表明各种模型的分类和检测性能得到了一致的改进,证明了 CBAM 的广泛适用性。简单介绍:CBAM的主要思想是通过关注重要的特征并抑制不必要的特征来增强网络的表示能力。模块首先应用通道注意力,关注"重要的"特征,然后应用空间注意力,关注这些特征的"重要位置"。到此本文的正式分享内容就结束了,在这里给大家推荐我的YOLOv11改进有效涨点专栏,本专栏目前为新开的,后期我会根据各种前沿顶会进行论文复现,也会对一些老的改进机制进行补充,如果大家觉得本文帮助到你了,订阅本专栏,关注后续更多的更新~

tsg6698的博客 2万+

Hashtable和Dictionary性能比较

在.net1.1里经常会使用到Hashtable,到里.net 2.0以后我发现有了一个很好用的IDirectory实现类Directory。但还是会担心Directory的检索效率是否跟Hashtable相当,据我了解ArrayList的检索效率是非常差的,BinarySearch也不如Hashtable.所以做了一个测试。 class Program {

Asp.Net、ExtJs 、Python 3013

Python爬虫:抓取外卖平台餐厅菜单、价格与评价数据

美团外卖:国内领先的外卖平台之一,提供餐饮外卖、超市配送等服务。饿了么:另一大主流外卖平台,覆盖广泛的餐饮品类。等:国际性的外卖平台。在本文中,我们将以美团外卖为例,展示如何抓取餐厅的菜单、价格和评价等数据。我们会使用Python的爬虫库,如Scrapy和Selenium,来解决抓取任务。本文详细介绍了如何使用Python爬虫抓取外卖平台上的餐厅菜单、价格、评价等信息。我们展示了如何使用Scrapy和Selenium抓取静态与动态网页数据,如何清洗和存储数据,并讨论了如何应对外卖平台的反爬虫机制。

2201_76125261的博客 1499

信号检测算法的MATLAB仿真:能量检测、循环平稳检测和匹配滤波检测

根据具体的应用场景和要求,选择合适的信号检测算法可以提高系统的性能和可靠性。在无线电通信中,信号检测是一项重要的任务,它用于检测和识别接收到的信号。在本文中,我们将介绍三种常用的信号检测算法:能量检测、循环平稳检测和匹配滤波检测,并提供相应的MATLAB源代码进行仿真实现。在上述代码中,我们首先设置了能量检测的阈值,然后生成了一个包含1000个服从正态分布的随机信号样本的信号。在上述代码中,我们首先设置了信号模板,然后生成了一个包含信号模板的信号样本。最后,通过比较相关性的最大值与阈值来判断信号是否存在。

PixelLancer的博客 1363

Hashtable和Directory性能比较

http://www.cnblogs.com/peter-peng/archive/2013/04/27/3046681.html Hashtable和Directory性能比较 在.net1.1里经常会使用到Hashtable,到里.net 2.0以后我发现有了一个很好用的IDirectory实现类 Directory。但还是会担心Directory的检索效率是否跟 Hashtable相当

mituan1234567的专栏 1156

超声波雷达探测车位及信号处理方法

在APA泊车中用到了超声波雷达,第一次接触,总结研究之。

周陽讀書 1229

C# HashTable与Dictionary的区别

HashTable和Dictionary的区别   1.HashTable   哈希表(HashTable)表示键/值对的集合。在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似key-value的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。Hashtable...

xulong5000的专栏 378

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

arraylist与list dictionary与hashtable 区别

之间泛型这块学得不是很好,今天老师给复习了一下,并上网查了一些资料,目前总结如下:泛型位于System.Collections.Generic 命名空间 在.NET 2.0中引入,好处是:能提供比非泛型强类型集合更好的类型安全性和性能。性能更好指的是在指定数据类型的情况下,如果数据类型为值类型,避免了非泛型集合的装箱与拆箱过程,从而大大提高效率。下面以. Hashtable与Direc

Kevin yan的专栏 1712

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

C#之数组、ArrayList和List、HashTable与Dictionary的区别

数组、ArrayList和List区别 数组 数组在C#中是最早出现的。它在内存中是连续的存储的,所以索引速度很快,而且赋值与修改元素也很简单。可以利用偏移地址访问元素,时间复杂度为O(1);可以用折半查找法查找元素,效率高。 同时,数组也有很多缺点。数组分配在一块连续的数据空间上,因此分配空间时必须确定大小。空间的连续,也导致了存储效率低,插入和删除元素效率比较低,而且...

weixin_40200876的博客 1074

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

hashTable与HashMap区别

HashTable的应用非常广泛,HashMap是新框架中用来代替HashTable的类,也就是说建议使用HashMap,不要使用HashTable。可能你觉得HashTable很好用,为什么不用呢?这里简单分析他们的区别。    1.HashTable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样。

fygkchina的专栏 438

HashMap和Hashtable的区别

(1)HashMap继承自AbstractMap,而Hashtable继承自Directory (2)HashMap是线程不安全的,而Hashtable是线程安全的 (3)Hashtable不允许null key和null value,但是HashMap允许

rj2017211811的博客 139

Csharp学习笔记(week4)上--字典、泛型、文件操作

语法糖是编程语言提供的一种便捷写法,它不增加新功能,只是用更简洁的方式表达已有的功能。编译器或解释器会把这些"甜"的语法还原成原始的、复杂的代码。它不会改变代码的功能,但让代码更易读、更简洁、更优雅。

ersan1124的博客 602

C#入门进阶:泛型、集合、IO流与文件操作核心知识点总结

作为一名C#初学者,在系统学习了泛型、集合、IO流及文件操作相关知识后,整理了一份详细的学习笔记,既是对近期学习的复盘,也希望能帮助到和我一样刚入门C#的小伙伴。本文将围绕泛型约束、常用集合(ArrayList、队列、栈、字典等)、IO流及文件操作展开,结合实际案例拆解核心用法,避开常见坑点。

m0_73623130的博客 411

深入解析 PowerShell 核心引擎的 C 编码规范:命名、性能、安全与跨平台准则

本文基于 PowerShell 仓库官方的 C# 编码规范文档([coding-guidelines.md](https://link.gitcode.com/i/751af50b8879c7f708faf189aa1eecfe))展开,系统讲解该引擎在命名、布局、成员可见性、文档注释、性能敏感代码、安全审查与跨平台可移植代码等方面的硬性约定与工程考量。读完本文后,你不仅能完整掌握 PowerSh

gitblog_00373的博客 306

Yaconf终极指南:构建高性能PHP配置管理系统的7个关键技术点

Yaconf(Yet Another Configurations Container)是一个革命性的PHP持久化配置容器,它通过内存存储配置数据实现了零拷贝访问,为高并发场景下的PHP应用提供了前所未有的性能提升。🚀 ## 1. 传统PHP配置管理的性能瓶颈与解决方案 在传统的PHP应用中,配置管理通常面临以下挑战: | 问题 | 传统方案 | Yaconf解决方案 | |------|

gitblog_00661的博客 528

这几天c#的学习

2. Dictionary:泛型键值对集合,强类型约束,检索效率高,是HashTable的泛型升级版。传参:参数类型是object,方法里要强转常用操作:给线程起名、Sleep休眠、暂停、继续、终止线程。Process.Start() :启动程序/网页 Kill() :强制结束进程。流是有序的数据序列,分为字节流和字符流,读取用Reader、写入用Writer。用来管理电脑上的进程,可以启动、结束进程,获取进程ID、名称、启动时间等信息。线程:进程里面的执行单元,一个进程可以有多个线程一起干活。

2403_89438064的博客 197

Yaconf实战指南:PHP高性能配置容器深度解析

在当今高并发Web应用中,配置管理已成为性能瓶颈的关键因素之一。传统PHP配置方案如`parse_ini_file()`每次请求都需要重新读取和解析文件,这种重复的I/O操作和解析开销在配置频繁访问的场景下会造成显著性能损耗。Yaconf作为PHP持久化配置容器,通过内存驻留机制彻底解决了这一痛点,将配置访问速度提升至极致。 ## 解决传统配置管理的性能瓶颈 传统PHP配置管理面临的核心问题是

gitblog_00891的博客 463

C#基础学习:泛型、异常、集合、多线程与IO流

泛型是C# 2.0推出的新语法,不是语法糖,而是由框架升级提供的功能。泛型允许用同一个方法/类来处理不同类型的参数,解决了"功能相似但数据类型不同"的代码复用问题。继承Exception流是一组连续的一维数据,包含开头和结尾,游标指示当前位置。流的三个基本操作读取:将数据从流传输到数据结构写入:将数据从数据源传输到流查找:查询和修改流中的当前位置常见的流类型流类型说明FileStream文件读写内存读写(速度快)缓冲流,提升性能网络套接字读写加密数据流独立存储文件读写PipeStream管道读写。

HUANGZHQN的博客 170

七、数组和集合(一维数组和二维数组的声明以及使用,ArrayList类,HashTable,List,Directory字典等常用集合(泛型和非泛型))...

数组 数组就是一个集合,同一数据类型的一组值 ,是数量固定的相同类型元素的组合 。 数组属于引用类型 数组的索引从0开始,就是说如果你想访问一个数组元素,你就得通过,相应元素的整数索引号访问。 定义一维数组:数组类型[ ] 数组名=new 数据类型[元素个数]; int [ ] arrMyInt= new int [10];//定义了一个数组 //该数组的数据类型是int,具有10个元...

weixin_33713350的博客 165
上一篇: GridView 控件中显示序号的问题
下一篇: 关于关系数据库的几种设计范式
SpringFiled
博客等级 码龄15年 9粉丝 78原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值