.Net中Hashtable的应用
每个元素是一个存储在 DictionaryEntry 对象中的键/值对。键不能为空引用(Visual Basic 中为 Nothing),但值可以。
用作 Hashtable 中的键的对象必须实现或继承 Object.GetHashCode 和 Object.Equals 方法。如果键相等性只是引用相等性,这些方法的继承实现将满足需要。此外,如果该键存在于 Hashtable 中,那么当使用相同参数调用这些方法时,这些方法必须生成相同的结果。只要键对象用作 Hashtable 中的键,它们就必须是永远不变的。
当把某个元素添加到 Hashtable 时,将根据键的哈希代码将该元素放入存储桶中。该键的后续查找将使用键的哈希代码只在一个特定存储桶中搜索,这将大大减少为查找一个元素所需的键比较的次数。
Hashtable 的加载因子确定元素与存储桶的最大比率。加载因子越小,平均查找速度越快,但消耗的内存也增加。默认的加载因子 1.0 通常提供速度和大小之间的最佳平衡。当创建 Hashtable 时,也可以指定其他加载因子。
当向 Hashtable 添加元素时,Hashtable 的实际加载因子将增加。当实际加载因子达到此加载因子时,Hashtable 中存储桶的数目自动增加到大于当前 Hashtable 存储桶数两倍的最小质数。
Hashtable 中的每个键对象必须提供其自己的哈希函数,可通过调用 GetHash 访问该函数。但是,可将任何实现 IHashCodeProvider 的对象传递到 Hashtable 构造函数,而且该哈希函数用于该表中的所有对象。
1、遍历Hashtable的键值对:
方案一:
Hashtable myHT = new Hashtable();
myHT.Add("First", "Hello");
myHT.Add("Second", "World");
myHT.Add("Third", "!");
IDictionaryEnumerator myEnumerator = myHT.GetEnumerator();
Console.WriteLine( "\t-KEY-\t-VALUE-" );
while ( myEnumerator.MoveNext() )
{
Console.WriteLine("\t{0}:\t{1}", myEnumerator.Key, myEnumerator.Value);
}
结果如下:
-KEY- -VALUE-
Third: !
Second: World
First: Hello
方案二:
foreach(Object obj in myHT.Keys)
{
Console.WriteLine("\t{0}:\t{1}", (string)obj , myHT[obj ]);
}
方案三:
foreach(DictionaryEntry de in myHT ) //myHT 为一个Hashtable实例
{
Console.WriteLine(de.Key);//de.Key对应于key/value键值对key
Console.WriteLine(de.Value);//de.Key对应于key/value键值对value
}
2、实现可排序的Hashtable:
原本以为需要自己实现,经讨论发现微软已有类似功能的类库SortedList。
SortedList 在内部维护
两个数组以将数组存储到列表中;即,一个数组用于键,另一个数组用于相关联的值。每个元素都是一个可作为 DictionaryEntry 对象进行访问的键/值对。键不能为空引用(Visual Basic 中为
Nothing),但值可以。
SortedList 的容量是列表可拥有的元素数。随着向
SortedList 中添加元素,容量通过重新分配按需自动增加。可通过调用
TrimToSize 或通过显式设置
Capacity 属性减少容量。
SortedList 的元素将按照特定的
IComparer 实现(在创建
SortedList 时指定)或按照键本身提供的
IComparable 实现并依据键来进行排序。不论在哪种情况下,
SortedList 都不允许重复键。
索引顺序基于排序顺序。当添加元素时,元素将按正确的排序顺序插入 SortedList,同时索引会相应地进行调整。若移除了元素,索引也会相应地进行调整。因此,当在 SortedList 中添加或移除元素时,特定键/值对的索引可能会更改。
由于要进行排序,所以在 SortedList 上操作比在 Hashtable 上操作要慢。但是,SortedList 允许通过相关联键或通过索引对值进行。
分享到:
相关推荐
利用asp.net遍历hashtable中的值
WinFormHashTable最简单用法,.net hashtable ,hashtable ,hashtable用法
【ASP.NET编程知识】asp.net基于HashTable实现购物车的方法.docx
C# .net HashTable
主要介绍了asp.net基于HashTable实现购物车的方法,涉及asp.net中HashTable结合session实现购物车功能的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
.NET中Hashtable的源代码,Reflector出来的,并且消除了一些错误.可以直接使用.在03下编译通过
asp.net Hashtable自定义实现代码,比较多,大家可以看下,测试。
利用hashtable对Datalist分页,简单实用!
本节介绍 ASP.NET 2.0 中的新特性。 ASP.NET 2.0 母版页 本节解释母版页(Master Pages)的概念。 ASP.NET 2.0 导航 本节讲解 ASP.NET 2.0 的导航控件。 ASP.NET 参考手册 ASP.NET HTML Server 控件参考 完整...
您可能感兴趣的文章:asp.net 实现自定义Hashtable (.net)asp.net基于session实现购物车的方法ASP.NET购物车实现过程详解asp.net 购物车的实现浅析asp.net 购物车实现详细代码asp.net基于HashTable实现购物车的方法
在C#中应用哈希表(Hashtable) 在哈希表中添加一个key/value键值对:HashtableObject.Add(key,value); 在哈希表中去除某个key/value键值对:HashtableObject.Remove(key); 从哈希表中移除所有元素: ...
利用委托机制处理.NET中的异常 与正则表达式相关的几个小工具 你真的了解.NET中的String吗? .NET中的方法及其调用(一) 如何判断ArrayList,Hashtable,SortedList 这类对象是否相等 帮助解决网页和JS文件中的中文...
该文档实现了Hashtable在C#中的常用的函数
.net中泛型的使用示例,ArryList list<> hashtable dictionary<> 等等。
asp.net下的序列化,支持hashtable
List Hashtable 的相关操作 asp.net 内含详细代码示例
在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似keyvalue的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。Hashtable中key...
使用.NET Remoting 建立分布式应用程序(四)