社区
C#
帖子详情
请教:DictionaryEntry和Hashtable有什么区别
ouyang4683
2009-07-14 10:49:38
请说的...简单一点点
只知道好像都是KEY 和VALUE
然后Hashtable是无序的
...全文
2140
12
打赏
收藏
请教:DictionaryEntry和Hashtable有什么区别
请说的...简单一点点 只知道好像都是KEY 和VALUE 然后Hashtable是无序的
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Mayjean520
2011-06-03
打赏
举报
回复
明白了。。。O(∩_∩)O谢谢了。
道格拉斯
2011-04-01
打赏
举报
回复
你们谈论的可真详细,谢谢了!
qq2008520
2010-04-28
打赏
举报
回复
[Quote=引用 2 楼 ralpha08 的回复:]
Hashtable 内的每一组对象就是一个DictionaryEntry
例如我们要循环hashtable
foreach (DictionaryEntry de in myHashtable) {...}
[/Quote]
说得很清楚了 谢谢··
hecker728
2009-07-14
打赏
举报
回复
Dictionary泛型 中的任何键都必须是唯一的。键不能为空引用,但是如果值类型 TValue 为引用类型,该值则可以为空。
Hashtable每个元素都是一个存储在 DictionaryEntry 对象中的键/值对。键不能为 空引用,但值可以。
C# 语言中的 foreach 语句(需要集合中每个元素的类型。由于 Hashtable 的每个元素都是一个键/值对,因此元素类型既不是键的类型,也不是值的类型。而是 DictionaryEntry 类型。例如:
foreach (DictionaryEntry myDE in myHashtable) {...}
Hide1984
2009-07-14
打赏
举报
回复
用DictionaryEntry来遍历HashTable
而Directory<T,T>是HashTable的泛型模式,但他们解决冲突的方法是不一样的。
用KeyValuePair<T,T>来遍历Directory<T,T>
qldsrx
2009-07-14
打赏
举报
回复
你应该问“Dictionary和Hashtable有什么区别”才有意义。你那种问法就好像在问一棵树和一片树林有什么区别了。
SQL77
2009-07-14
打赏
举报
回复
[Quote=引用 4 楼 enihs 的回复:]
前者为一个键值对
后者为键值对的集合,当然集合中可以包含多个或者一个键值对或者null
[/Quote]
就是这样,前者是一个,后都是集合
qqiuzaihui
2009-07-14
打赏
举报
回复
[Quote=引用 2 楼 ralpha08 的回复:]
Hashtable 内的每一组对象就是一个DictionaryEntry
例如我们要循环hashtable
foreach (DictionaryEntry de in myHashtable) {...}
[/Quote]
up
enihs
2009-07-14
打赏
举报
回复
前者为一个键值对
后者为键值对的集合,当然集合中可以包含多个或者一个键值对或者null
明缘
2009-07-14
打赏
举报
回复
在。Net 里面,基本的字典是由类HashTable来表示的,MicroSoft提供了一个已经建立好的
.Net基类stringDictionary,如果主键是字符串就可以用它来代替HashTable。
也就是是说 HashTable是字典的一个具体的表现形式。但是你可以自己定义与HashTable不同的字典。
ralpha08
2009-07-14
打赏
举报
回复
Hashtable 内的每一组对象就是一个DictionaryEntry
例如我们要循环hashtable
foreach (DictionaryEntry de in myHashtable) {...}
ztenv
2009-07-14
打赏
举报
回复
Hashtable需要拆/装箱,效率比较低;
C#
Hashtable
//
Hashtable
2.cs // 给
Hashtable
添加元素的示例 using System; using System.Collections; public class Test { public static void Main() {
Hashtable
table = new
Hashtable
(); table.Add("Sunday", "星期天"); table.Add("Monday", "星期一"); table.Add("Tuesday", "星期二"); table.Add("Wednesday", "星期三"); table.Add("Thursday", "星期四"); table.Add("Friday", "星期五"); table.Add("Saturday", "星期六"); Console.WriteLine("表中的所有元素包括:"); IEnumerator e = table.GetEnumerator(); while (e.MoveNext()) {
Dictionary
Entry
de = (
Dictionary
Entry
)e.Current; Console.WriteLine("{0}-{1}", de.Key, de.Value); } try { table.Add("Wednesday", "周3"); } catch (ArgumentException ex) { Console.WriteLine(ex.Message); } Console.WriteLine("表中的所有元素包括:"); e = table.GetEnumerator(); while (e.MoveNext()) {
Dictionary
Entry
de = (
Dictionary
Entry
)e.Current; Console.WriteLine("{0}-{1}", de.Key, de.Value); } try { table["Wednesday"] = "周3"; } catch (Exception ex) { Console.WriteLine(ex.Message); } Console.WriteLine("表中的所有元素包括:"); e = table.GetEnumerator(); while (e.MoveNext()) {
Dictionary
Entry
de = (
Dictionary
Entry
)e.Current; Console.WriteLine("{0}-{1}", de.Key, de.Value); } } }
列举系统中的环境变量,listView1,System.Collections.
Dictionary
Entry
EnValue in Environment.GetEnvironmentVariables()C#源代码
列举系统中的环境变量,listView1,System.Collections.
Dictionary
Entry
EnValue in Environment.GetEnvironmentVariables()C#源代码 用VisualStudio2008创建
09:Directory字典.pdf
七:
Dictionary
:相当于规范了类型的
hashTable
1. 定义:
Dictionary
dics = new
Dictionary
(); 2. 添加元素:只能通过Add(),如: dics.Add("aa", "aa"); dics.Add("bb", "bb"); 3. 删除:通过key值删除 4. 遍历:三种遍历方法:遍历key,遍历value,通过类型
Dictionary
Entry
遍历。 #region
Dictionary
//创建一个字典
Dictionary
dics = new
Dictionary
(); //往字典里面添加元素,注意类型匹配 dics.Add("aa", "aa"); dics.Add("bb", "bb"); dics.Add("cc", "cc"); dics.Add("dd", "dd"); //遍历一共有三种方式 keys values
Dictionary
Entry
foreach(string s in dics.Keys) { Console.WriteLine(s+" "+dics[s]); }
asp.net
Hashtable
遍历写法
代码如下:foreach (
Dictionary
Entry
de in h)//h为
Hashtable
{ Response.Write(de.Key + “
”); } 您可能感兴趣的文章:asp.net 实现自定义
Hashtable
(.net)asp.net基于session实现购物车的方法ASP.NET购物车实现过程详解asp.net 购物车的实现浅析asp.net 购物车实现详细代码asp.net基于
HashTable
实现购物车的方法
求2个集合的交集
求交集和并集的线性算法(原创) 对于给定的两个集合,使用哈希表可以在线性时间复杂度内得到他们的交集和并集,具体说明如下: 假设有集合A={1, 7, 5, 13, 9, 10, 11}, B={5, 7, 10, 1, 18, 12}, 1)求交集,需要得到结果:A∩B={1, 5, 7,10} 思路如下: ①建立一个哈希表(
HashTable
),其键(KEY)表示集合中数字的值,其值(VALUE)表示集合中数字出现的次数 ②遍历集合A,将集合中的每个数字(KEY)插入哈希表,每个数字的出现次数(VALUE)设置为1 ③遍历集合B,对于集合中的每个数字: 如果哈希表中已经存在该数字,将对应的VALUE改为2 如果哈希表中不存在该数字,忽略 ④遍历哈希表,输出VALUE为2的数字,即得到A和B的交集 2) 求并集,需要得到结果:AUB={1,5,7,9,10,11,12,13,18} 思路如下: ①建立一个哈希表(
HashTable
),其键(KEY)表示集合中数字的值,其值(VALUE)可以无视 ②遍历集合A,将集合中的每个数字(KEY)插入哈希表 ③遍历集合B,对于集合中的每个数字: 如果哈希表中已经存在该数字,忽略 如果哈希表中不存在该数字,将这个数字插入哈希表 ④遍历哈希表,输出哈希表中的每个KEY,即为A和B的并集 上面以两个集合为例说明了交集和并集的求法,事实上,上述算法可以很方便的扩展到3个或3个以上的集合 的求交集和求并集。另外求并集时,由于哈希表的值(VALUE)部分不需要用到,所以这个数据结构也可以更换为 哈希集(HashSet)。 转载请注明出处。 VB中
HashTable
2012-08-20 14:43:21| 分类: asp.net|举报|字号 订阅 首先定义一个
hashtable
Dim hstl As New
Hashtable
hstl.Add(key, value) 'java是用.put MS开始全面模仿java 这说说vb.net中的
hashtable
基本用法: 添加值:hstl.add(key,value) 通过key取值: hstl.Item(key).ToString 判断是否含有Key: ContainsKey(key) 判断是否含有value: ContainsValue(value) 遍历
hashtable
: Dim de As
Dictionary
Entry
'泛型类 For Each de In hstl console.write(de.key & de.value) Next de
hashtable
不支持通过value取key. 求2个集合的交集 第一种方法 最简单、粗暴的循环遍历2个集合,判断如果有相同的元素就取出来。假设集合1的长度为M,集合2的长度为N,那么,时间复杂度为:O(M*N) 代码: public static List
GetIntersection(List
list1, List
list2) { List
list3 = new List
(); //第一种方法:循环遍历 //O(n×m) for (int i = 0; i < list1.Count; i++) { for (int j = 0; j < list2.Count; j++) { if (list1[i]==list2[j]) { list3.Add(list1[i]); } } } return list3; } 第二种方法 利用hash这种很有用的数据结构来实现。我们知道,hash的特点之一就是不允许有重复元素,即hash表中的元素都是唯一的。所以,我们的思路就是:先把第一个集合的所有元素都放进hashSet中,时间复杂度O(M);再把第二个集合中的元素放进hashSet中,如果有重复元素,就是这2个集合的交集,时间复杂度为O(N)。即总的时间复杂度从O(M*N)降低到了O(M+N)。 代码: public static List
GetIntersection2(List
list1, List
list2) { //第二种方法:hash List
list3 = new List
(); HashSet
hashSet = new HashSet
(); foreach (string item in list1) { hashSet.Add(item); } foreach (string item in list2) { if (hashSet.Add(item) == false) { list3.Add(item); } } return list3; } 测试 代码: static void Main(string[] args) { List
list1 = new List
(); list1.Add("apple"); list1.Add("banana"); list1.Add("pear"); list1.Add("orange"); list1.Add("grape"); List
list2 = new List
(); list2.Add("nokia"); list2.Add("sumsung"); list2.Add("htc"); list2.Add("apple"); list2.Add("orange"); List
list =new List
(); //test for two set join //list = TwoSetsIntersection.GetIntersection(list1, list2); list = TwoSetsIntersection.GetIntersection2(list1, list2); foreach (string item in list) { Console.Write(item + "\t"); } } 总结 hash的另一个特点是查找效率为O(1),惊人的高! 对于这道题目要是算出来O(M*N)的同学就应该补课了。出来混,迟早要还的。 HashSet
类 HashSet
类主要是设计用来做高性能集运算的,例如对两个集合求交集、并集、差集等。集合中包含一组不重复出现且无特性顺序的元素。 HashSet
的一些特性如下: 1、HashSet
中的值不能重复且没有顺序。 2、HashSet
的容量会按需自动添加。 构造方法: HashSet() 默认相等比较器创建一个空的新实例。 HashSet(IEnumerable
collection) 把指定集合中的collection中的数据复制到集中 HashSet(IEqualityComparer
comparer) 使用指定的相等比较器创建一个空的新实例 HashSet(IEnumerable
collection,IEqualityComparer
comparer) 使用指定的比较器实例化数据,且将指定集合中的元素复制到集合中。 因为HashSet
是专门设计来做集合运算的,因此它提供的方法中有不少是和集合运算相关的。 以下给出它的一些常用方法介绍 成员 类型 说明 Add 方法 将指定的元素添加到集合中 Clear 方法 清空集合中的所有元素 Contains 方法 确定某元素是否在HashSet
中 Exists 方法 确定HashSet
是否包含于指定条件相匹配的元素 ExceptWith 方法 从当前HashSet
移除指定集合中的所有元素 IntersectWith 方法 修改当前的HashSet
对象,以仅包含该对象和指定集合中存在的元素 IsProperSubsetOf 方法 确定HashSet
对象是否为指定集合的真子集 IsProperSupersetOf 方法 确定HashSet
对象是否为指定集合的真超集 IsSunsetOf 方法 确定HashSet
对象是否为指定集合的子集 IsSupersetOf 方法 确定HashSet
对象是否为指定集合的超集 Remove 方法 从HashSet
对象中移除指定的元素 RemoveWhere 方法 从HashSet
集合中移除与指定谓词所定义的条件相匹配的所有元素 SetEquals 方法 确定HashSet
对象与指定的集合中是否包含相同的元素 SynmmetricExceptWith 方法 修改当前的HashSet
对象,以仅包含该对象或指定集合中存在的元素 TrimExcess 方法 将HashSet
对象的容量设置为它所包含的元素的实际个数,向上舍入为接近的特性与实现的值。 UnionWith 方法 修改当前的HashSet
对象,以包含该对象本身和指定集合中存在的所有元素 给个简单的例子,写不完的,总之记得HashSet
主要的作用是用来进行,交集、并集等运算的就OK了。 static void Main(string[] args) { HashSet
hs = new HashSet
(); hs.Add("你"); hs.Add("好"); hs.Add("吗"); HashSet
hs1 = new HashSet
(); hs1.Add("你"); hs1.Add("好"); bool b = hs1.IsProperSubsetOf(hs); //确定hs1是否是hs的真子集 Console.WriteLine(b); //输出True HashSet
hs2 = new HashSet
(); hs2.Add("爱你"); IEnumerable
list = hs.Union(hs2); //返回并集 foreach (string str in list) { Console.WriteLine(str); //输出 你 好 吗 爱你 } Console.ReadKey(); }
C#
110,549
社区成员
642,562
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章