Hashtable,ListDictionary,HybridDictionary 的使用
来源:互联网 发布:证件照自拍软件 编辑:程序博客网 时间:2024/06/07 10:09
以下是 拷贝的文章
地址参考:http://blog.csdn.net/shankaipingo/archive/2006/09/22/1266467.aspx
Hashtable,ListDictionary,HybridDictionary
1.所谓存储名值对的三个容器: key-value
2.性能上
小数据量: ListDictionary优于Hashtable
大数据量: Hashtable优于ListDictionary
要知道Hashtable并不是线性存储结构,但是对于利用Hash因子取值的Hashtable在处理大数据量的时候有优势.
3.那么什么是小,什么是大?
10个或10个以下为小,10个以上为大.
如果你知道你的容器将存储的数据量肯定不超过10的话,请你选用ListDictionary
否则,请你选用Hashtable.
4.为什么要用HybridDictionary?
因为你往往不知道什么情况下,他的数据量将是多少.
如果你知道,那么请看3.
如果你不知道,请使用HybridDictionary,因为它帮你智能化的决定你的数据该用ListDictionary存储还是Hashtable存储.
而不用你主动决定该用那个数据类型.
因此,大家可以多多使用HybridDictionary,而不用直接使用Hashtable,因为我们的Hashtable存储的值往往并没有 那么多.
1.所谓存储名值对的三个容器: key-value
2.性能上
小数据量: ListDictionary优于Hashtable
大数据量: Hashtable优于ListDictionary
要知道Hashtable并不是线性存储结构,但是对于利用Hash因子取值的Hashtable在处理大数据量的时候有优势.
3.那么什么是小,什么是大?
10个或10个以下为小,10个以上为大.
如果你知道你的容器将存储的数据量肯定不超过10的话,请你选用ListDictionary
否则,请你选用Hashtable.
4.为什么要用HybridDictionary?
因为你往往不知道什么情况下,他的数据量将是多少.
如果你知道,那么请看3.
如果你不知道,请使用HybridDictionary,因为它帮你智能化的决定你的数据该用ListDictionary存储还是Hashtable存储.
而不用你主动决定该用那个数据类型.
因此,大家可以多多使用HybridDictionary,而不用直接使用Hashtable,因为我们的Hashtable存储的值往往并没有 那么多.
以上三个,都属hashtable,那Dictionary与他们有什么不同呢?
参考 :http://blog.tostudy.com.cn/blog/show.aspx?aid=1155
由于 Hashtable 和 Dictionary 同时存在, 在使用场景上必然存在选择性, 并不任何时刻都能相互替代.
[1] 单线程程序中推荐使用 Dictionary, 有泛型优势, 且读取速度较快, 容量利用更充分.
[2] 多线程程序中推荐使用 Hashtable, 默认的 Hashtable 允许单线程写入, 多线程读取, 对 Hashtable 进一步调用 Synchronized() 方法可以获得完全线程安全的类型. 而 Dictionary 非线程安全, 必须人为使用 lock 语句进行保护, 效率大减.
[3] Dictionary 有按插入顺序排列数据的特性 (注: 但当调用 Remove() 删除过节点后顺序被打乱), 因此在需要体现顺序的情境中使用 Dictionary 能获得一定方便. 以上分别谈到了 Hashtable, HashMap 和 Dictionary 三种类型, 介绍告一段落, 下面增加一些不成熟的观点: [1] 三种哈希表均允许任意 object 做关键字, 但实际使用中我们一般只用 string 做键值, 对 string 做 HashOf(string) 处理比较单纯, 速度较快, 而对 object 取 HashOf(object) 则情况复杂. 若想进一步提高速度, 可以考虑自定义一个只允许 string 作为关键字的哈希表. [2] Java HashMap 由于 f(K) 取与运算的特性, 每次扩容必须是 2 倍, 没有价钱可讲. 但 .NET Hashtable 和 Dictionary 的容量理论上只要求是质数, 新容量不一定要达到旧容量的 2 倍以上, 因而想进一步提高内存利用率, 可以考虑重写 Resize() 方法, 使得每次扩容变成稍大一点的质数即可. 当然这样一来插入效率会降低, 自行取舍. [3] 对 Hashtable 初始化时直接指定 capacity 是个好主意, 减少了 Resize() 的次数, 降低开销. 由于 Hashtable 和 Dictionary 同时存在, 在使用场景上必然存在选择性, 并不任何时刻都能相互替代.
[1] 单线程程序中推荐使用 Dictionary, 有泛型优势, 且读取速度较快, 容量利用更充分.
[2] 多线程程序中推荐使用 Hashtable, 默认的 Hashtable 允许单线程写入, 多线程读取, 对 Hashtable 进一步调用 Synchronized() 方法可以获得完全线程安全的类型. 而 Dictionary 非线程安全, 必须人为使用 lock 语句进行保护, 效率大减.
[3] Dictionary 有按插入顺序排列数据的特性 (注: 但当调用 Remove() 删除过节点后顺序被打乱), 因此在需要体现顺序的情境中使用 Dictionary 能获得一定方便. 以上分别谈到了 Hashtable, HashMap 和 Dictionary 三种类型, 介绍告一段落, 下面增加一些不成熟的观点: [1] 三种哈希表均允许任意 object 做关键字, 但实际使用中我们一般只用 string 做键值, 对 string 做 HashOf(string) 处理比较单纯, 速度较快, 而对 object 取 HashOf(object) 则情况复杂. 若想进一步提高速度, 可以考虑自定义一个只允许 string 作为关键字的哈希表. [2] Java HashMap 由于 f(K) 取与运算的特性, 每次扩容必须是 2 倍, 没有价钱可讲. 但 .NET Hashtable 和 Dictionary 的容量理论上只要求是质数, 新容量不一定要达到旧容量的 2 倍以上, 因而想进一步提高内存利用率, 可以考虑重写 Resize() 方法, 使得每次扩容变成稍大一点的质数即可. 当然这样一来插入效率会降低, 自行取舍. [3] 对 Hashtable 初始化时直接指定 capacity 是个好主意, 减少了 Resize() 的次数, 降低开销.
[1] 单线程程序中推荐使用 Dictionary, 有泛型优势, 且读取速度较快, 容量利用更充分.
[2] 多线程程序中推荐使用 Hashtable, 默认的 Hashtable 允许单线程写入, 多线程读取, 对 Hashtable 进一步调用 Synchronized() 方法可以获得完全线程安全的类型. 而 Dictionary 非线程安全, 必须人为使用 lock 语句进行保护, 效率大减.
[3] Dictionary 有按插入顺序排列数据的特性 (注: 但当调用 Remove() 删除过节点后顺序被打乱), 因此在需要体现顺序的情境中使用 Dictionary 能获得一定方便. 以上分别谈到了 Hashtable, HashMap 和 Dictionary 三种类型, 介绍告一段落, 下面增加一些不成熟的观点: [1] 三种哈希表均允许任意 object 做关键字, 但实际使用中我们一般只用 string 做键值, 对 string 做 HashOf(string) 处理比较单纯, 速度较快, 而对 object 取 HashOf(object) 则情况复杂. 若想进一步提高速度, 可以考虑自定义一个只允许 string 作为关键字的哈希表. [2] Java HashMap 由于 f(K) 取与运算的特性, 每次扩容必须是 2 倍, 没有价钱可讲. 但 .NET Hashtable 和 Dictionary 的容量理论上只要求是质数, 新容量不一定要达到旧容量的 2 倍以上, 因而想进一步提高内存利用率, 可以考虑重写 Resize() 方法, 使得每次扩容变成稍大一点的质数即可. 当然这样一来插入效率会降低, 自行取舍. [3] 对 Hashtable 初始化时直接指定 capacity 是个好主意, 减少了 Resize() 的次数, 降低开销. 由于 Hashtable 和 Dictionary 同时存在, 在使用场景上必然存在选择性, 并不任何时刻都能相互替代.
[1] 单线程程序中推荐使用 Dictionary, 有泛型优势, 且读取速度较快, 容量利用更充分.
[2] 多线程程序中推荐使用 Hashtable, 默认的 Hashtable 允许单线程写入, 多线程读取, 对 Hashtable 进一步调用 Synchronized() 方法可以获得完全线程安全的类型. 而 Dictionary 非线程安全, 必须人为使用 lock 语句进行保护, 效率大减.
[3] Dictionary 有按插入顺序排列数据的特性 (注: 但当调用 Remove() 删除过节点后顺序被打乱), 因此在需要体现顺序的情境中使用 Dictionary 能获得一定方便. 以上分别谈到了 Hashtable, HashMap 和 Dictionary 三种类型, 介绍告一段落, 下面增加一些不成熟的观点: [1] 三种哈希表均允许任意 object 做关键字, 但实际使用中我们一般只用 string 做键值, 对 string 做 HashOf(string) 处理比较单纯, 速度较快, 而对 object 取 HashOf(object) 则情况复杂. 若想进一步提高速度, 可以考虑自定义一个只允许 string 作为关键字的哈希表. [2] Java HashMap 由于 f(K) 取与运算的特性, 每次扩容必须是 2 倍, 没有价钱可讲. 但 .NET Hashtable 和 Dictionary 的容量理论上只要求是质数, 新容量不一定要达到旧容量的 2 倍以上, 因而想进一步提高内存利用率, 可以考虑重写 Resize() 方法, 使得每次扩容变成稍大一点的质数即可. 当然这样一来插入效率会降低, 自行取舍. [3] 对 Hashtable 初始化时直接指定 capacity 是个好主意, 减少了 Resize() 的次数, 降低开销.
更多的集合介绍:
http://blog.csdn.net/chengking/archive/2005/08/27/466286.aspx
http://blog.csdn.net/ChengKing/category/150896.aspx
- Hashtable,ListDictionary,HybridDictionary 的使用
- Hashtable,ListDictionary,HybridDictionary 的使用
- Hashtable,ListDictionary,HybridDictionary比较
- 使用 HybridDictionary 类
- HashTable的使用示例
- Hashtable的使用
- Hashtable的使用
- hashtable的使用
- Hashtable的使用
- Hashtable类的使用
- Hashtable的使用
- Hashtable的简单使用
- HashTable 的使用
- c# Hashtable 的使用
- Hashtable的使用
- HybridDictionary 类
- .net集合类的研究--链表—ListDictionary,LinkedList
- .net集合类的研究--链表—ListDictionary,LinkedList<T>
- 管理者or下属的下属:中层角色如何定位?
- 一篇男人必看的文章
- Task和Activity相关
- perl的expect使用方法,实现非交互式登录
- Windows下架设svn服务器方法指导
- Hashtable,ListDictionary,HybridDictionary 的使用
- HashTable学习1
- HashTable学习2
- 严重:Error starting static Resources 错误的解决
- Hashtable和HashMap深入学习心得
- virtualbox共享
- 真正最正确的用BAT运行JAVA不显示DOS窗口(连闪一下都不闪)
- 趣味C—猴子吃桃问题
- CONVERT在日期转换中的使用示例