欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#中哈希表(HashTable)用法實例詳解(添加/移除/判斷/遍歷/排序等)

 更新時間:2016年06月29日 11:29:52   作者:馬語者  
這篇文章主要介紹了C#中哈希表(HashTable)用法,簡單講述了哈希表的原理并結合實例形式詳細分析了C#針對哈希表進行添加、移除、判斷、遍歷、排序等操作的實現(xiàn)技巧,需要的朋友可以參考下

本文實例講述了C#中哈希表(HashTable)用法。分享給大家供大家參考,具體如下:

1.  哈希表(HashTable)簡述

在.NET Framework中,Hashtable是System.Collections命名空間提供的一個容器,用于處理和表現(xiàn)類似keyvalue的鍵值對,其中key通??捎脕砜焖俨檎?,同時key是區(qū)分大小寫;value用于存儲對應于key的值。Hashtable中keyvalue鍵值對均為object類型,所以Hashtable可以支持任何類型的keyvalue鍵值對.

2. 什么情況下使用哈希表

(1)某些數(shù)據(jù)會被高頻率查詢
(2)數(shù)據(jù)量大
(3)查詢字段包含字符串類型
(4)數(shù)據(jù)類型不唯一

3. 哈希表的使用方法

哈希表需要使用的namespace

using System.Collections;
using System.Collections.Generic;

哈希表的基本操作:

//添加一個keyvalue鍵值對:
HashtableObject.Add(key,value);
//移除某個keyvalue鍵值對:
HashtableObject.Remove(key);
//移除所有元素:
HashtableObject.Clear();
// 判斷是否包含特定鍵key:
HashtableObject.Contains(key);

控制臺程序例子:

using System;
using System.Collections; //file使用Hashtable時,必須引入這個命名空間
class Program
{
 public static void Main()
 {
   Hashtable ht = new Hashtable(); //創(chuàng)建一個Hashtable實例
   ht.Add("北京", "帝都"); //添加keyvalue鍵值對
   ht.Add("上海", "魔都");
   ht.Add("廣州", "省會");
   ht.Add("深圳", "特區(qū)");
   string capital = (string)ht["北京"];
   Console.WriteLine(ht.Contains("上海")); //判斷哈希表是否包含特定鍵,其返回值為true或false
   ht.Remove("深圳"); //移除一個keyvalue鍵值對
   ht.Clear(); //移除所有元素
 }
}

哈希表中使用多種數(shù)據(jù)類型的例子:

using System;
using System.Collections;
class Program
{
  static Hashtable GetHashtable()
  {
    Hashtable hashtable = new Hashtable();
    hashtable.Add("名字", "小麗");
    hashtable.Add("年齡", 22);
    return hashtable;
  }
  static void Main()
  {
    Hashtable hashtable = GetHashtable();
    string name = (string)hashtable["名字"];
    Console.WriteLine(name);
    int age = (int)hashtable["年齡"];
    Console.WriteLine(age);
  }
}

當獲取哈希表中數(shù)據(jù)時,如果類型聲明的不對,會出現(xiàn)InvalidCastException錯誤。使用as-statements可以避免該錯誤。

using System;
using System.Collections;
using System.IO;
class Program
{
  static void Main()
  {
  Hashtable hashtable = new Hashtable();
  hashtable.Add(100, "西安");
  // 能轉換成功
  string value = hashtable[100] as string;
  if (value != null)
  {
    Console.WriteLine(value);
  }
  // 轉換失敗,獲取的值為null,但不會拋出錯誤。
  StreamReader reader = hashtable[100] as StreamReader;
  if (reader == null)
  {
     Console.WriteLine("西安不是StreamReader型");
  }
  // 也可以直接獲取object值,再做判斷
  object value2 = hashtable[100];
  if (value2 is string)
  {
    Console.Write("這個是字符串型: ");
    Console.WriteLine(value2);
  }
  }
}

4. 遍歷哈希表

遍歷哈希表需要用到DictionaryEntry Object,代碼如下:

for(DictionaryEntry de in ht) //ht為一個Hashtable實例
{
  Console.WriteLine(de.Key); //de.Key對應于keyvalue鍵值對key
  Console.WriteLine(de.Value); //de.Key對應于keyvalue鍵值對value
}

遍歷鍵

foreach (int key in hashtable.Keys)
{
  Console.WriteLine(key);
}

遍歷值

foreach (string value in hashtable.Values)
{
  Console.WriteLine(value);
}

5. 對哈希表進行排序

對哈希表按key值重新排列的做法:

ArrayList akeys=new ArrayList(ht.Keys);
akeys.Sort(); //按字母順序進行排序
foreach(string key in akeys)
{
  Console.WriteLine(key + ": " + ht[key]); //排序后輸出
}

6. 哈希表的效率

System.Collections下的哈希表(Hashtable)和System.Collections.Generic下的字典(Dictionary)都可用作lookup table,下面比較一下二者的執(zhí)行效率。

Stopwatch sw = new Stopwatch();
Hashtable hashtable = new Hashtable();
Dictionary<string, int> dictionary = new Dictionary<string, int>();
int countNum = 1000000;
sw.Start();
for (int i = 0; i < countNum; i++)
{
  hashtable.Add(i.ToString(), i);
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds); //輸出: 744
sw.Restart();
for (int i = 0; i < countNum; i++)
{
  dictionary.Add(i.ToString(), i);
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds); //輸出: 489
sw.Restart();
for (int i = 0; i < countNum; i++)
{
  hashtable.ContainsKey(i.ToString());
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds); //輸出: 245
sw.Restart();
for (int i = 0; i < countNum; i++)
{
  dictionary.ContainsKey(i.ToString());
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds); //輸出: 192

由此可見,添加數(shù)據(jù)時Hashtable快。頻繁調用數(shù)據(jù)時Dictionary快。

結論:Dictionary<K,V>是泛型的,當K或V是值類型時,其速度遠遠超過Hashtable。

更多關于C#相關內容感興趣的讀者可查看本站專題:《C#遍歷算法與技巧總結》、《C#程序設計之線程使用技巧總結》、《C#操作Excel技巧總結》、《C#中XML文件操作技巧匯總》、《C#常見控件用法教程》、《WinForm控件用法總結》、《C#數(shù)據(jù)結構與算法教程》、《C#數(shù)組操作技巧總結》及《C#面向對象程序設計入門教程

希望本文所述對大家C#程序設計有所幫助。

相關文章

最新評論