码迷,mamicode.com
首页 > 其他好文 > 详细

HashTable

时间:2014-07-24 09:43:12      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   使用   数据   io   

HashTable是用存放多个键值对的一种集合。其中key,value都是object类型。

用foreach遍历HashTable时,使用DictionaryEntry,也就是说,HashTable的每一组键值组合是一个DictionaryEntry。

foreach(DictionaryEntry de in myHashTable)
{
    //de.key...;
    //de.value
}

HashTable中,保存数据是一个bucket[],该类型是一个结构体

1 private struct bucket
2 {
3     public object key;
4     public object val;
5     public int hash_coll;
6 }

其中hash_coll是key的哈希码即key.GetHashCode()

HashTable的数据组织方式:由hash_coll%bukect.Length算出一个数组下标,数据放到数组中对应下标的位置中(这是基本算法,还有解决冲突的算法)。取值的时候也是由hashcode

所以我们看到的HashTable中的数据顺序相对我们放入其中的顺序是无序的,所以,我们不能通过hashTable[index]的方式来访问,这样会把index当作key

HashTable对应一个泛型版本Dictionary<TKey,TValue>

foreach遍Dictionary使用KeyValuePair<Tkey,TValue>

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

2:多线程程序中推荐使用 Hashtable, 默认的 Hashtable 允许单线程写入, 多线程读取, 对 Hashtable 进一步调用 Synchronized() 方法可以获得完全线程安全的类型. 而 Dictionary 非线程安全, 必须人为使用 lock 语句进行保护, 效率大减.

3:Dictionary 有按插入顺序排列数据的特性 (注: 但当调用 Remove() 删除过节点后再Add()就不会再按插入顺序排列数据), 因此在需要体现顺序的情境中使用 Dictionary 能获得一定方便.

HashTable,布布扣,bubuko.com

HashTable

标签:style   blog   color   使用   数据   io   

原文地址:http://www.cnblogs.com/dave314/p/3864334.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!