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

C#中Hashtable和Dictionary的區(qū)別

 更新時(shí)間:2024年04月15日 09:27:40   作者:那個(gè)那個(gè)魚(yú)  
Hashtable 和 Dictionary 都是 C# 中用于存儲(chǔ)鍵值對(duì)的數(shù)據(jù)結(jié)構(gòu),本文主要介紹了C#中Hashtable和Dictionary的區(qū)別,具有一定的參考價(jià)值,感興趣的可以了解一下

Hashtable 和 Dictionary 都是 C# 中用于存儲(chǔ)鍵值對(duì)的數(shù)據(jù)結(jié)構(gòu)

哈希表 Hashtable

使用Hashtable需要引入命名空間System.Collections。Hashtable中key/value的鍵值對(duì)均為object類型,所以Hashtable可以支持任何類型的key/value鍵值對(duì),Hashtable中每個(gè)對(duì)象是一個(gè)存儲(chǔ)在DictionaryEntry對(duì)象中的鍵值對(duì)。

常用屬性

屬性描述
Count獲取Hashtable中包含的鍵值對(duì)個(gè)數(shù)
Keys獲取Hashtable中所有鍵的集合
Values獲取Hashtable中所有值的集合

常用方法

方法描述
public virtual void Add(object key, object value);向Hashtable添加一個(gè)帶有指定的鍵和值的元素
public virtual bool ContainsKey(object key);判斷Hashtable是否包含指定的鍵
public virtual bool ContainsValue(object value);判斷Hashtable是否包含指定的值
public virtual void Remove(object key);從Hashtable中移除指定的鍵的元素
public virtual void Clear();從Hashtable中移除所有的元素

注意:由于IDictionary接口是鍵/值對(duì)的非泛型集合的基接口,而每個(gè)元素都是鍵/值對(duì),并存儲(chǔ)在DictionaryEntry對(duì)象中,因此元素類型既不是鍵的類型,也不是值的類型,而是DictionaryEntry類型。(留個(gè)坑,自己也沒(méi)搞明白是啥)

Hashtable ht = new Hashtable();

ht.Add(1, true);
ht.Add(2, "FALSE");

Console.WriteLine("當(dāng)前包含鍵值對(duì)個(gè)數(shù):{0}", ht.Count);//輸出:2

Console.WriteLine("---- 通過(guò)鍵求鍵值對(duì) ----");
foreach (var key in ht.Keys)
{
    Console.WriteLine("{0} - {1}", key, ht[key]);//輸出:2-"FALSE" 1-True 
}

Console.WriteLine("---- 添加后值的集合 ----");
foreach (var value in ht.Values)
{
    Console.WriteLine("{0}", value);//輸出:FALSE True
}

if (ht.ContainsKey(1))
{
    Console.WriteLine("Hashtable中包含鍵 1 .");//輸出
}

if(ht.ContainsValue(true))
{
    Console.WriteLine("Hashtable中包含值 true .");//輸出
}

ht.Remove(1);
Console.WriteLine("---- 移除鍵 1 之后 ----");
foreach(DictionaryEntry de in ht)
{
    Console.WriteLine("{0} - {1}", de.Key, de.Value);//輸出:2 - FALSE
}


ht.Clear();
Console.WriteLine("---- 移除全部之后 ----");
foreach (DictionaryEntry de in ht)
{
    Console.WriteLine("{0} ------- {1}", de.Key, de.Value);//無(wú)輸出
}

Console.ReadKey();

字典 Dictionary

Dictionary<TKey, TValue>包含在System.Collections.Generic命名空間中。Dictionary<TKey, TValue>可以支持指定的任何類型的key/value鍵值對(duì)。所以Dictionary<TKey, TValue>對(duì)象只能添加指定類型的key/value鍵值對(duì)。Dictionary<TKey, TValue>中每個(gè)對(duì)象是一個(gè)存儲(chǔ)在KeyValuePair<TKey, TValue>對(duì)象中的鍵值對(duì)。

常用屬性

屬性描述
Count獲取Dictionary<TKey, TValue>中包含的鍵值對(duì)個(gè)數(shù)
Item獲取Dictionary<TKey, TValue>中的某個(gè)鍵值對(duì)
Keys獲取Dictionary<TKey, TValue>中所有鍵的集合
Values獲取Dictionary<TKey, TValue>中所有值的集合

常用方法

方法描述
public void Add(TKey key, TValue value);將指定的鍵和值添加到字典中
public bool ContainsKey(TKey key);判斷Dictionary<TKey, TValue>是否包含指定的鍵
public bool ContainsValue(TValue value);判斷Dictionary<TKey, TValue>是否包含指定的值
public bool Remove(TKey key);從Dictionary<TKey, TValue>中移除指定的鍵的元素
public void Clear();從Dictionary<TKey, TValue>中移除所有的鍵值對(duì)
Dictionary<int, string> dc = new Dictionary<int, string>();

dc.Add(21002121, "張三");
dc.Add(21002122, "李四");

Console.WriteLine("字典中的鍵值對(duì)個(gè)數(shù):{0}", dc.Count);//輸出:2

Console.WriteLine("---- 添加之后鍵值對(duì) ----");
foreach (var item in dc)
{
    Console.WriteLine("{0} - {1}", item.Key, item.Value);//輸出:21002121 - 張三   21002122 - 李四
}

Console.WriteLine("---- 通過(guò)鍵求鍵值對(duì) ----");
foreach (var key in dc.Keys)
{
    Console.WriteLine("{0} - {1}", key, dc[key]);//輸出:21002121 - 張三   21002122 - 李四
}

Console.WriteLine("---- 添加后值的集合 ----");
foreach (var value in dc.Values)
{
    Console.WriteLine("{0}", value);//張三 李四
}

if(dc.ContainsKey(21002121))
{
    Console.WriteLine("Dictionary中包含鍵 21002121 .");//輸出
}

if(dc.ContainsValue("李四"))
{
    Console.WriteLine("Dictionary中包含值 李四 .");//輸出
}

dc.Remove(21002121);

Console.WriteLine("---- 移除鍵 21002121 之后 ----");
foreach (KeyValuePair<int, string> kp in dc)
{
    Console.WriteLine("{0} - {1}", kp.Key, kp.Value);//輸出:21002122 - 李四
}

dc.Clear();
Console.WriteLine("---- 移除全部之后 ----");
foreach (KeyValuePair<int, string> kp in dc)
{
    Console.WriteLine("{0} ----- {1}", kp.Key, kp.Value);//無(wú)輸出
}


Console.ReadKey();

Hashtable 與 Dictionary 插入方法的時(shí)間比較

Dictionary<int, int> dc = new Dictionary<int, int>();
Hashtable ht = new Hashtable();

int count = 10000000;//插入的次數(shù) 1千萬(wàn)
Stopwatch sw = new Stopwatch();
sw.Start();//計(jì)時(shí)
for(int i = 0; i < count; i++)
{
    dc.Add(i, i);
}
sw.Stop();
Console.WriteLine("字典Dictionary<TKey, TValue>耗時(shí)(毫秒):" + sw.ElapsedMilliseconds);//輸出:388

sw.Restart();
for (int i = 0; i < count; i++)
{
    ht.Add(i, i);
}
sw.Stop();
Console.WriteLine("哈希表Hashtable耗時(shí)(毫秒):" + sw.ElapsedMilliseconds);//輸出:2497
Console.ReadLine();

注意:所消耗的時(shí)間并不是唯一的,性能一般的電腦建議減低插入次數(shù)

區(qū)別

1. 實(shí)現(xiàn)方式:

Hashtable 是基于哈希表實(shí)現(xiàn)的,而 Dictionary 是基于泛型實(shí)現(xiàn)的。

2. 類型安全:

Hashtable 是非泛型的,可以存儲(chǔ)任意類型的鍵和值,而 Dictionary 是泛型的,可以指定鍵和值的類型,并在編譯時(shí)進(jìn)行類型檢查,提供更好的類型安全性。

3. 性能:

由于 Hashtabl 是非泛型的,它在存儲(chǔ)和檢索數(shù)據(jù)時(shí)需要進(jìn)行裝箱和拆箱操作,這會(huì)帶來(lái)一定的性能損耗。而 Dictionary 是泛型的,不需要進(jìn)行裝箱和拆箱操作,因此在性能上通常比 Hashtable 更好。

4. 可空鍵和值:

Hashtable 允許存儲(chǔ) null 鍵和 null 值,而 Dictionary 不允許存儲(chǔ) null 鍵和 null 值。

5. 迭代順序:

Hashtable 中的鍵值對(duì)是無(wú)序的,而 Dictionary 中的鍵值對(duì)是按照插入順序排序的。

總結(jié):

  • 如果需要一個(gè)類型安全、性能較好且不需要存儲(chǔ) null 鍵和 null 值的鍵值對(duì)集合,推薦使用Dictionary。
  • 如果需要一個(gè)可以存儲(chǔ)任意類型的鍵和值,并且不關(guān)心性能和類型安全性的話,可以使用Hashtable。

到此這篇關(guān)于C#中Hashtable 和 Dictionary的區(qū)別的文章就介紹到這了,更多相關(guān)C# Hashtable Dictionary內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • C#中委托的+=和-=深入研究

    C#中委托的+=和-=深入研究

    這篇文章主要介紹了C#中委托的+=和-=深入研究,本文深入研究+=和-=在執(zhí)行時(shí)都做了哪些事情,加深對(duì)C#委托的理解和使用,需要的朋友可以參考下
    2015-01-01
  • C#?委托與?Lambda?表達(dá)式轉(zhuǎn)換機(jī)制及弱事件模式下的生命周期詳解

    C#?委托與?Lambda?表達(dá)式轉(zhuǎn)換機(jī)制及弱事件模式下的生命周期詳解

    本文介紹了C#委托和Lambda表達(dá)式的工作原理,包括委托的內(nèi)部結(jié)構(gòu)、Lambda表達(dá)式的轉(zhuǎn)換機(jī)制以及弱事件模式下的生命周期管理,感興趣的朋友一起看看吧
    2025-02-02
  • C#中的sealed修飾符的作用詳解

    C#中的sealed修飾符的作用詳解

    在 C# 中,sealed 修飾符的作用是 “密封”用來(lái)阻止類被繼承,或者阻止方法/屬性在派生類中被重寫(xiě),接下來(lái)通過(guò)本文給大家介紹C#中的sealed修飾符的作用詳解,感興趣的朋友一起看看吧
    2025-11-11
  • WPF實(shí)現(xiàn)動(dòng)畫(huà)效果

    WPF實(shí)現(xiàn)動(dòng)畫(huà)效果

    這篇文章介紹了WPF實(shí)現(xiàn)動(dòng)畫(huà)效果的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01
  • C#中SQL參數(shù)傳入空值報(bào)錯(cuò)解決方案

    C#中SQL參數(shù)傳入空值報(bào)錯(cuò)解決方案

    這篇文章主要介紹了C#中SQL參數(shù)傳入空值報(bào)錯(cuò)解決方案,需要的朋友可以參考下
    2017-06-06
  • C#圖片上傳效果實(shí)例分析

    C#圖片上傳效果實(shí)例分析

    這篇文章主要介紹了C#圖片上傳效果實(shí)現(xiàn)方法,可實(shí)現(xiàn)圖片上傳效果預(yù)覽功能,需要的朋友可以參考下
    2015-06-06
  • AOP從靜態(tài)代理到動(dòng)態(tài)代理(Emit實(shí)現(xiàn))詳解

    AOP從靜態(tài)代理到動(dòng)態(tài)代理(Emit實(shí)現(xiàn))詳解

    AOP為Aspect Oriented Programming的縮寫(xiě),意思是面向切面編程的技術(shù)。下面這篇文章主要給大家介紹了關(guān)于AOP從靜態(tài)代理到動(dòng)態(tài)代理(Emit實(shí)現(xiàn))的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-09-09
  • C#實(shí)現(xiàn)的MD5加密功能與用法示例

    C#實(shí)現(xiàn)的MD5加密功能與用法示例

    這篇文章主要介紹了C#實(shí)現(xiàn)的MD5加密功能與用法,結(jié)合實(shí)例形式分析了C# MD5加密類的定義與使用方法,需要的朋友可以參考下
    2017-01-01
  • C#中DataTable刪除行的方法分析

    C#中DataTable刪除行的方法分析

    這篇文章主要介紹了C#中DataTable刪除行的方法,包括了常見(jiàn)的幾種刪除方法的分析,需要的朋友可以參考下
    2014-09-09
  • C#開(kāi)發(fā)WinForm根據(jù)條件改變DataGridView行顏色

    C#開(kāi)發(fā)WinForm根據(jù)條件改變DataGridView行顏色

    這篇文章介紹了C#開(kāi)發(fā)WinForm根據(jù)條件改變DataGridView行顏色的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03

最新評(píng)論

酒泉市| 资源县| 隆安县| 琼结县| 清水河县| 和平区| 那曲县| 榆中县| 临泉县| 木兰县| 肃南| 郎溪县| 平谷区| 达州市| 永春县| 海南省| 栾川县| 翼城县| 甘孜| 濮阳市| 彰化市| 隆回县| 房产| 长武县| 星座| 五大连池市| 华池县| 阿合奇县| 济阳县| 彩票| 湖州市| 石城县| 乐昌市| 常宁市| 长垣县| 鹤山市| 久治县| 探索| 盐山县| 弥勒县| 贡觉县|