C# Hashtable

一、什么是Hashtable

Hashtable,中文叫哈希表。它里面的英文Hash,音译是哈希。但Hash还有另一个翻译,就是“散列”,所以也叫散列表。

Hashtable是一个集合。集合是数据结构的一种,数据结构有集合、线性、树形、图形等。

Hashtable可用于存储键值对。

二、C#中如何声明一个Hashtable

您直接new一个Hashtable对象即可,如下所示:

Hashtable hashtable = new Hashtable();

三、如何添加和删除

通过Add和Remove方法可以给Hashtable添加或者删除项。

Hashtable hashtable = new Hashtable();
hashtable.Add("1x1", "1");
hashtable.Add("2x2", "4");
hashtable.Add("3x3", "9");
 
hashtable.Remove("3x3");


四、如何遍历

Hashtable的每个项是DictionaryEntry对象,如下:

foreach (DictionaryEntry entry in hashtable)
{
    Console.WriteLine(entry.Key + " 得 " + entry.Value);
}


运行一下,代码输出结果如下图:

为什么不显示:3x3 得 9?因为此项被我们Remove删除掉了。

五、判断是否包含有某项

使用Contains方法进行处理:

if (hashtable.Contains("3x3"))
{
    Console.WriteLine("包含3x3项");
}
else
{
    Console.WriteLine("不 包含3x3项");
}


演示示例所用的完整源码如下:

static void Main(string[] args)
{
 
    Hashtable hashtable = new Hashtable();
    hashtable.Add("1x1", "1");
    hashtable.Add("2x2", "4");
    hashtable.Add("3x3", "9");
 
    hashtable.Remove("3x3");
 
    foreach (DictionaryEntry entry in hashtable)
    {
        Console.WriteLine(entry.Key + " 得 " + entry.Value);
    }
 
    if (hashtable.Contains("3x3"))
    {
        Console.WriteLine("包含3x3项");
    }
    else
    {
        Console.WriteLine("不 包含3x3项");
    }
}


六、线程安全的Hashtable如何创建

如上图,通过静态方法Synchronized(Hashtable table)来创建,编写代码类似如下:

Hashtable hashtable = System.Collections.Hashtable.Synchronized(new Hashtable());


当然,您也可以使用lock关键来实现,但它本身已经具有方法了,您确定还需要自己再用lock写一遍吗?

Hashtable是通过使用了 synchronized 关键字来保证其线程安全

        在Java中,可以使用synchronized关键字来标记一个方法或者代码块,当某个线程调用该对象的synchronized方法或者访问synchronized代码块时,这个线程便获得了该对象的锁,其他线程暂时无法访问这个方法,只有等待这个方法执行完毕或者代码块执行完毕,这个线程才会释放该对象的锁,其他线程才能执行这个方法或者代码块。

七、与Dictionary的一些差异

1.Dictionary是类型安全的,即指它不需要装箱拆箱等操作。

2.Hashtable是线程安全的。但Dictionary不是,即指在多线程下,它的值无法确保同步。

可能有些没遇到过这种情况的初学者不好理解线程安全的意思,在多线程时,a、b两条线程都访问同一个Dictionary对象,在a线程中,会不断的因为业务操作,去修改Dictionary对象的值,而b线程想要时刻获取这些值,以为得到的跟a改变后的是一样的,但实际却不同。这就是线程安全的意思。

类型安全,是指装箱拆箱,即把对象转为object,或者把object转为对象。

3.在读取速度方面,Dictionary要快一些,原因可能是装箱拆箱的损耗。因为Hashtable不是类型安全的。

4.本质都是数据结构中的集合。数据结构分逻辑结构和物理结构,设计结构的计算方式我们叫算法。

5.Dictionary支持泛型,目前Hashtable是不支持的。

6.Hashtable是无序的,读取时,它并不按照你加入的先后顺序读出来。但Dictionary则是按你加入的先后顺序读取的。

祝您用餐愉快。
 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值