DictionaryEntry 結構——哈希表(一)


定義:可設置或檢索的字典鍵/值對。

命名空間:  System.Collections
程序集:  mscorlib(在 mscorlib.dll 中)

 

C# 語言中的 foreach 語句(在 Visual C++ 中為 for each,在 Visual Basic 中為 For Each)需要集合中每個元素的類型。由於 IDictionary 的每個元素都是一個鍵/值對,因此元素類型既不是鍵的類型,也不是值的類型。而是 DictionaryEntry 類型。

/*foreach 語句是對枚舉數的包裝,它只允許從集合中讀取,不允許寫入集合。*/

下面的示例演示如何使用 DictionaryEntry 來循環訪問 Hashtable 對象。

 

 1 // A simple example for the DictionaryEntry structure.
 2 using System;
 3 using System.Collections;
 4 
 5 class Example
 6 {
 7     public static void Main()
 8     {
 9         // Create a new hash table.
10         //
11         Hashtable openWith = new Hashtable();
12 
13         // Add some elements to the hash table. There are no 
14         // duplicate keys, but some of the values are duplicates.
15         openWith.Add("txt", "notepad.exe");
16         openWith.Add("bmp", "paint.exe");
17         openWith.Add("dib", "paint.exe");
18         openWith.Add("rtf", "wordpad.exe");
19 
20         // When you use foreach to enumerate hash table elements,
21         // the elements are retrieved as KeyValuePair objects.
22         Console.WriteLine();
23         foreach (DictionaryEntry de in openWith)
24         {
25             Console.WriteLine("Key = {0}, Value = {1}", de.Key, de.Value);
26         }
27     }
28 }
29 
30 /* This code example produces output similar to the following:
31 
32 Key = rtf, Value = wordpad.exe
33 Key = txt, Value = notepad.exe
34 Key = dib, Value = paint.exe
35 Key = bmp, Value = paint.exe
36  */
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 構造函數,而且該哈希函數用於該表中的所有對象。



總之:DictionaryEntry就是鍵值對
Key是鍵
Value是值
Hashtable 內的每一組對象就是一個DictionaryEntry 

例如我們要循環hashtable

foreach (DictionaryEntry de in myHashtable) {...}

 

Hashtable就是一個DictionaryEntry的集合
在一個Hashtable中
Key的值是不可以重復的,必須是唯一的,但Value的值可以是重復的
在查詢時,Key擔當索引的功能

 

 

支持版本

.NET Framework

受以下版本支持:3.5、3.0、2.0、1.1、1.0

.NET Compact Framework

受以下版本支持:3.5、2.0、1.0

XNA Framework

受以下版本支持:2.0、1.0

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM