"COLOR: #0000ff">foreach(string str in hashTable.Keys)
Hashtable 對象由包含集合元素的存儲桶組成。存儲桶是 Hashtable 中各元素的虛擬子組,與大多數集合中進行的搜索和檢索相比,存儲桶可令搜索和檢索更為便捷。每一存儲桶都與一個哈希代碼關聯,該哈希代碼是使用哈希函數生成的並基於該元素的鍵。
哈希函數是基於鍵返回數值哈希代碼的算法。鍵是正被存儲的對象的某一屬性的值。哈希函數必須始終為相同的鍵返回相同的哈希代碼。一個哈希函數能夠為兩個不同的鍵生成相同的哈希代碼,但從哈希表檢索元素時,為每一唯一鍵生成唯一哈希代碼的哈希函數將令性能更佳。
在 Hashtable 中用作元素的每一對象必須能夠使用 )的 Dictionary 的性能優於 Hashtable,這是因為 Hashtable 的元素屬於 Object 類型,所以在存儲或檢索值類型時通常發生裝箱和取消裝箱操作。
----------------------------------------------------------------------------------------------------
TTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
{; {
using System;
using System.Collections;
namespace testSortedList
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
SortedList sl = new SortedList(new MySort()); //不排序
sl.Add(333,333);
sl.Add(111,111);
sl.Add(222,222);
PrintList(sl);
Console.ReadLine();
}
private static void PrintList(SortedList sl)
{
for(int i=0;i<sl.Count ;i++)
{
Console.WriteLine("{0}\t{1}",sl.GetKey(i),sl.GetByIndex(i));
}//end for
}//end fn()
}
public class MySort:IComparer
{
#region IComparer 成員
public int Compare(object x, object y)
{
return -1;
//排序
// int iResult = (int)x - (int)y;
// if(iResult == 0) iResult = -1;
// return iResult;
}
#endregion
}
}
使用單鏈接列表實現 IDictionary。建議用於通常包含 10 個或 10 個以下項的集合。
最後我測試了使用泛類型的Dictionary<T,T>, 盡管msdn上說hashtable和Dictionary的實現是一樣的,不過同樣的數據,返回的結果卻是不同的,我沒有找到更多的解釋,測試代碼如下
using System;
using System.Collections;
using System.Collections.Specialized;
using System.Collections.Generic;
namespace NoSortHashtable
{
/// <summary>
/// Summary description for Class1.
/// </summary>
public class Class1
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
Hashtable ht = new Hashtable();
ht.Add("hunan","changsha");
ht.Add("beijing","beijing");
ht.Add("anhui","hefei");
ht.Add("sichuan","chengdu");
foreach(string str in ht.Keys)
{
Console.WriteLine(str + " : " + ht[str]);
}
Console.WriteLine("------------------------------------");
Dictionary<String,String> dic = new Dictionary<String,String>();
dic.Add("hunan","changsha");
dic.Add("beijing","beijing");
dic.Add("anhui","hefei");
dic.Add("sichuan","chengdu");
foreach(string str in dic.Keys)
{
Console.WriteLine(str + " : " + dic[str]);
}
Console.WriteLine("------------------------------------");
; ListDictionary lsdic = new ListDictionary();