最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

1.  哈希表(HashTable)簡述

在.NET Framework中,Hashtable是System.Collections命名空間提供的一個容器,用于處理和表現(xiàn)類似keyvalue的鍵值對,其中key通??捎脕砜焖俨檎?,同時key是區(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);
  }
}

當獲取哈希表中數(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>是泛型的,當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è)計有所幫助。

相關(guān)文章

  • C#中dynamic的使用方法及應(yīng)用場景

    C#中dynamic的使用方法及應(yīng)用場景

    在 C# 編程中,dynamic 類型是一個非常特殊的類型,它在編譯時并不會進行類型檢查,而是在運行時才進行類型解析,本文將詳細講解 dynamic 的使用方法、優(yōu)缺點以及一些實際應(yīng)用場景,需要的朋友可以參考下
    2024-08-08
  • C#控制臺程序中使用官方依賴注入的實現(xiàn)

    C#控制臺程序中使用官方依賴注入的實現(xiàn)

    這篇文章主要介紹了C#控制臺程序中使用官方依賴注入的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • C#實現(xiàn)的序列化通用類實例

    C#實現(xiàn)的序列化通用類實例

    這篇文章主要介紹了C#實現(xiàn)的序列化通用類,實例分析了C#序列化與反序列化操作相關(guān)技巧,需要的朋友可以參考下
    2015-04-04
  • C#對Json進行序列化和反序列化

    C#對Json進行序列化和反序列化

    這篇文章介紹了C#對Json進行序列化和反序列化的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • 淺析JAVA中過濾器、監(jiān)聽器、攔截器的區(qū)別

    淺析JAVA中過濾器、監(jiān)聽器、攔截器的區(qū)別

    本文通過代碼分析和文字說明的方式給大家淺析JAVA中過濾器、監(jiān)聽器、攔截器的區(qū)別,感興趣的朋友一起看下吧
    2015-09-09
  • C#調(diào)用百度翻譯API實現(xiàn)一個翻譯功能

    C#調(diào)用百度翻譯API實現(xiàn)一個翻譯功能

    一直喜歡用Google Translate API進行在線翻譯,但是服務(wù)越來越慢這篇文章,所以只能換一個了,主要給大家介紹了關(guān)于C#調(diào)用百度翻譯API實現(xiàn)一個翻譯功能的相關(guān)資料,需要的朋友可以參考下
    2021-06-06
  • C#創(chuàng)建安全的字典(Dictionary)存儲結(jié)構(gòu)

    C#創(chuàng)建安全的字典(Dictionary)存儲結(jié)構(gòu)

    本文主要對存儲結(jié)構(gòu)字典(Dictionary)的一些常用方法進行簡單的說明,并闡述了如何創(chuàng)建安全的字典(Dictionary)存儲結(jié)構(gòu)。希望對大家有所幫助
    2016-12-12
  • C#讀取txt文件數(shù)據(jù)的方法實例

    C#讀取txt文件數(shù)據(jù)的方法實例

    讀取txt文本數(shù)據(jù)的內(nèi)容,是我們開發(fā)中經(jīng)常會遇到的一個功能,這篇文章主要給大家介紹了關(guān)于C#讀取txt文件數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下
    2021-05-05
  • C#實現(xiàn)大數(shù)字運算的實例代碼

    C#實現(xiàn)大數(shù)字運算的實例代碼

    這篇文章介紹了C#實現(xiàn)大數(shù)字運算的實例代碼,有需要的朋友可以參考一下
    2013-10-10
  • C#使用位域技術(shù)進行對象二進制序列化優(yōu)

    C#使用位域技術(shù)進行對象二進制序列化優(yōu)

    在操作系統(tǒng)中,進程信息對于系統(tǒng)監(jiān)控和性能分析至關(guān)重要,這個過程中,如何將捕獲到的進程對象轉(zhuǎn)換為二進制數(shù)據(jù),并進行優(yōu)化,以減小數(shù)據(jù)包的大小,成為了一個關(guān)鍵問題,下面我們就來看看如何使用位域技術(shù)對C#對象進行二進制序列化優(yōu)化吧
    2024-01-01

最新評論

保山市| 阿图什市| 海南省| 灵台县| 锡林浩特市| 新沂市| 河曲县| 蒲江县| 怀远县| 南充市| 大厂| 盐山县| 靖宇县| 嵊泗县| 阳朔县| 历史| 华安县| 白山市| 天津市| 福泉市| 平顶山市| 隆化县| 环江| 容城县| 耒阳市| 明溪县| 邹城市| 吉木乃县| 迭部县| 马边| 双峰县| 花莲县| 达州市| 莎车县| 丰县| 奎屯市| 万全县| 上蔡县| 益阳市| 扎赉特旗| 崇阳县|