查看: 2217|回复: 4
打印 上一主题 下一主题

[其他] Hashtable和Dictionary学习笔记

[复制链接]

2722

主题

42

听众

3万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
38268
精华
111

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2014-10-29 23:52:28 |只看该作者 |倒序浏览

单线程程序中推荐使用Dictionary,有泛型优势,且读取速度较快,容量利用更充分。

多线程程序中推荐使用Hashtable,默认的Hashtable允许单线程写入,多线程读取,对Hashtable进一步调用Synchronized()可以获得完全线程安全的类型,而Dictionary非线程安全,必须人为使用Lock语句进行保护,效率大减。
ps:在内聚函数中使用Dictionary,不会有多线程读取情况。在全局数据使用Hashtable,可能存在多线程读取。

Dictionary有按插入顺序排列数据的特性(注:但当调用Remove()删除过节点后顺序被打乱),因此在需要体现顺序的情景中使用Dictionary能获得一定方便。

Hashtable类和Dictionary<Of<(TKey, TValue)>>泛指类实现IDictionary接口。

对于值类型,特定类型(不包括Object)的Dictionary的性能优于Hashtable,这是因为Hashtable的元素属于Object类型,所以在存储或检索值类型时通常发生装箱和拆箱操作。

Hashtable中keyvalue键值对均为object类型,所以Hashable可以支持任何类型的keyvalue键值对。
PS:Hashtable在存储值类型时,考虑使用Dictionary

Dictionary使用索引器取值时,如果键不存在就会引发异常,可使用ContarnsKey()来判断,经常取值最好用TryGetValue方法来获取集合中对应的键值。

分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

115

主题

3

听众

5676

积分

高级设计师

Rank: 6Rank: 6

纳金币
7268
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

沙发
发表于 2014-10-29 23:56:34 |只看该作者
Thanks for sharing this one !
回复

使用道具 举报

hyui    

1

主题

2

听众

6671

积分

高级设计师

Rank: 6Rank: 6

纳金币
2715
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

板凳
发表于 2014-10-30 00:44:57 |只看该作者
Good to learn
回复

使用道具 举报

55

主题

2

听众

3099

积分

中级设计师

Rank: 5Rank: 5

纳金币
24
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

地板
发表于 2014-10-30 07:43:36 |只看该作者
总是看得到两位老外热心的回帖。两位外兄是逢贴必回。
回复

使用道具 举报

1

主题

1

听众

263

积分

设计实习生

Rank: 2

纳金币
21
精华
0

最佳新人

5#
发表于 2014-10-30 11:41:54 |只看该作者
Unity中用多线程多吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-12-1 06:59 , Processed in 0.095083 second(s), 31 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部