C# 哈希表Hashtable与字典表Dictionary<K,V>的比较。
来源:互联网 发布:淘宝宝贝批量上架 编辑:程序博客网 时间:2024/06/11 20:52
一Hashtable 和 Dictionary <K, V> 类型
1):单线程程序中推荐使用 Dictionary, 有泛型优势, 且读取速度较快, 容量利用更充分.
2):多线程程序中推荐使用 Hashtable, 默认的 Hashtable 允许单线程写入, 多线程读取, 对 Hashtable 进一步调用 Synchronized()方法可以获得完全线程安全的类型. 而Dictionary 非线程安全, 必须人为使用 lock 语句进行保护, 效率大减.
3):Dictionary 有按插入顺序排列数据的特性 (注: 但当调用 Remove() 删除过节点后顺序被打乱), 因此在需要体现顺序的情境中使用 Dictionary 能获得一定方便.
在使用哈希表保存集合元素(一种键/值对)时,首先要根据键自动计算哈希代码,以确定该元素的保存位置,再把元素的值放入相应位置所指向的存储桶中。在查找时,再次通过键所对应的哈希代码到特定存储桶中搜索,这样将大大减少为查找一个元素进行比较的次数。
HashTable中的key/value均为object类型,由包含集合元素的存储桶组成。存储桶是 HashTable中各元素的虚拟子组,与大多数集合中进行的搜索和检索相比,存储桶可令搜索和检索更为便捷。每一存储桶都与一个哈希代码关联,该哈希代码是使用哈希函数生成的并基于该元素的键。HashTable的优点就在于其索引的方式,速度非常快。如果以任意类型键值访问其中元素会快于其他集合,特别是当数据量特别大的时候,效率差别尤其大。
HashTable的应用场合有:做对象缓存,树递归算法的替代,和各种需提升效率的场合。
二、哈希表Hashtabl
Hastable是哈希表的实现,能根据关键字取关键值,这key的类型是object, value的类型也是object。
在哈希表中添加一个key/value键值对:HashtableObject.Add(key,value);
在哈希表中去除某个key/value键值对:HashtableObject.Remove(key);
从哈希表中移除所有元素: HashtableObject.Clear();
判断哈希表是否包含特定键key: HashtableObject.Contains(key);
遍历Hashtable对象的两种方法:
由于Hashtable每个元素都是一个键/值对,因此元素类型既不是键的类型,也不是值的类型,而是DictionaryEntry类型。
Hashtable示例代码
<pre name="code" class="csharp">Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->//方法一foreach (System.Collections.DictionaryEntry de in myHashtable){ //注意HastTable内存储的默认类型是object,需要进行转换才可以输出 Console.WriteLine(de.Key.ToString()); Console.WriteLine(de.Value.ToString());}//方法二System.Collections.IDictionaryEnumerator enumerator = myHashtable.GetEnumerator();while (enumerator.MoveNext()){ Console.WriteLine(enumerator.Key); // Hashtable关健字 Console.WriteLine(enumerator.Value); // Hashtable值}
三、字典Dictionary
Dictionary<Tkey,Tvalue>是Hastbale的泛型实现。
<span style="font-size:18px;">Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->//遍历键foreach (string key in myDictionary.Keys){ //遍历某键的值 foreach (string val in myDictionary[key]) { }}</span>由于 Dictionary 是键和值的集合,因此元素类型并非键类型或值类型。相反,元素类型是键类型和值类型的 KeyValuePair。
<span style="font-size:18px;">字典遍历示例 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->foreach (KeyValuePair<string, string> kvp in myDictionary){ string key = kvp.Key;//key包含了字典里的键 for (int i = 0; i < kvp.Value.Count; i++) { Response.Write(kvp.Value[i]); }}</span>
示例:
代码 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->//定义一个<string,int>的Dictionary,让它的值进行添加(也可以用Add方法)Dictionary<string, int> dic = new Dictionary<string, int>();//添加两个键为"成绩1","成绩2";并为它们的值赋为0dic["成绩1"] = 0;dic["成绩2"] = 0;// 把这两个值分别加1dic["成绩1"]++;dic["成绩2"]++;
- 哈希表Hashtable与字典表Dictionary<K,V>的比较。
- C# 哈希表Hashtable与字典表Dictionary<K,V>的比较。
- 哈希表Hashtable与字典表Dictionary<K,V>的比较。(多线程推荐hash,单线程推荐dictionary)
- 哈希表Hashtable与字典表Dictionary<K,V>,谁胜谁优
- Dictionary<K,V>和HashTable的区别
- Dictionary<K,V>和HashTable的区别
- C#中Dictionary<K,V>对应的非泛型类是Hashtable,而不是Dictionary
- hashtable 与字典表Dictionary
- 【转】C#泛型-泛型字典集合Dictionary<K,V>
- C# 的Hashtable和Dictionary比较
- C# 的Hashtable和Dictionary比较
- (转载)C# 的Hashtable和Dictionary比较
- HashTable与Dictionary比较
- Hashtable 和 Dictionary <K, V> 类型 区别
- 转载:Dictionary与HashTable的比较
- Dictionary 与 Hashtable 的速度比较
- C#中hashtable 与 dictionary的区别
- C#使用集合组织数据(HashTable、ArrayList、List<T>,Dictionary<K,V>
- eclipse 的一些小知识
- java多线程--生产者和消费者模型
- MEAN.IO和MEAN.JS有什么区别
- 在myeclipse中maven部署流程及遇见的问题
- linux下安装MySQL出错file /usr/share/mysql/charsets/latin2.xml from install of MySQL-......
- C# 哈希表Hashtable与字典表Dictionary<K,V>的比较。
- NHibernate could not get or update next value[SQL: ] 对象名 'hibernate_unique_key' 无效。
- C++的学习技巧!
- 2016随笔
- iOS 终端导出推送p12 文件
- 对话框封装类(普通对话框,列表对话框,单选按钮对话框,复选对话框)
- 机器学习之降维算法2-主成分分析(PCA)
- Educational Codeforces Round 5 D Longest k-Good Segment 贪心
- qt串口编程