美文网首页
C#中HashTable用法和Dictionary比较

C#中HashTable用法和Dictionary比较

作者: Leo0543 | 来源:发表于2020-03-27 18:27 被阅读0次

一、哈希表(Hashtable)用法

  1. 哈希表(HashTable)简述
    Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似key-value的键值对。
    key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。
    Hashtable中key-value键值对均为object类型,所以Hashtable可以支持任何类型的key-value键值对.
  2. 什么情况下使用哈希表
    (1)某些数据会被高频率查询
    (2)数据量大
    (3)查询字段包含字符串类型
    (4)数据类型不唯一
  3. 哈希表的使用方法
using System.Collections;
using System.Collections.Generic;
//直接定义一个哈希表
Hashtable aa = new Hashtable
{
    {“键1”, 1}, 
    {“键2”, 1},
    {“键3”, 1}
};


//添加一个keyvalue键值对:
HashtableObject.Add(key,value);

//移除某个keyvalue键值对:
HashtableObject.Remove(key);

//移除所有元素:           
HashtableObject.Clear(); 

// 判断是否包含特定键key:
HashtableObject.Contains(key);


  1. 遍历哈希表
    遍历哈希表需要用到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);
}

二、哈希表(Hashtable)和字典(Dictionary)的比较

1.添加数据时Hashtable快。频繁调用数据时Dictionary快。
Dictionary<K,V>是泛型的,当K或V是值类型时,其速度远远超过Hashtable。

2.由于 Hashtable 和 Dictionary 同时存在, 在使用场景上必然存在选择性, 并不任何时刻都能相互替代.
[1] 单线程程序中推荐使用 Dictionary, 有泛型优势, 且读取速度较快, 容量利用更充分.
[2] 多线程程序中推荐使用 Hashtable, 默认的 Hashtable 允许单线程写入, 多线程读取, 对 Hashtable 进一步调用 Synchronized() 方法可以获得完全线程安全的类型. 而 Dictionary 非线程安全, 必须人为使用 lock 语句进行保护, 效率大减.
[3] Dictionary 有按插入顺序排列数据的特性 (注: 但当调用 Remove() 删除过节点后顺序被打乱), 因此在需要体现顺序的情境中使用 Dictionary 能获得一定方便.

相关文章

网友评论

      本文标题:C#中HashTable用法和Dictionary比较

      本文链接:https://www.haomeiwen.com/subject/tjdruhtx.html