欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

C#教程

當(dāng)前位置:主頁 > 軟件編程 > C#教程 >

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

來源:本站原創(chuàng)|時間:2020-01-10|欄目:C#教程|點擊: 次

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

1.  哈希表(HashTable)簡述

在.NET Framework中,Hashtable是System.Collections命名空間提供的一個容器,用于處理和表現(xiàn)類似keyvalue的鍵值對,其中key通??捎脕砜焖俨檎遥瑫rkey是區(qū)分大小寫;value用于存儲對應(yīng)于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);
  }
}

當(dāng)獲取哈希表中數(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, "西安");
  // 能轉(zhuǎn)換成功
  string value = hashtable[100] as string;
  if (value != null)
  {
    Console.WriteLine(value);
  }
  // 轉(zhuǎn)換失敗,獲取的值為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對應(yīng)于keyvalue鍵值對key
  Console.WriteLine(de.Value); //de.Key對應(yīng)于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快。頻繁調(diào)用數(shù)據(jù)時Dictionary快。

結(jié)論:Dictionary<K,V>是泛型的,當(dāng)K或V是值類型時,其速度遠遠超過Hashtable。

更多關(guān)于C#相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《C#遍歷算法與技巧總結(jié)》、《C#程序設(shè)計之線程使用技巧總結(jié)》、《C#操作Excel技巧總結(jié)》、《C#中XML文件操作技巧匯總》、《C#常見控件用法教程》、《WinForm控件用法總結(jié)》、《C#數(shù)據(jù)結(jié)構(gòu)與算法教程》、《C#數(shù)組操作技巧總結(jié)》及《C#面向?qū)ο蟪绦蛟O(shè)計入門教程》

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

上一篇:C#簡單遍歷指定文件夾中所有文件的方法

欄    目:C#教程

下一篇:解決安裝VS2008無法更改默認路徑的問題

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

本文地址:http://mengdiqiu.com.cn/a1/C_jiaocheng/6399.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請與我們聯(lián)系,我們將在24小時內(nèi)進行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有