c# contains方法_C# Hashtable,哈希表

一、什么是Hashtable

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

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

Hashtable可用于存储键值对。

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

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

Hashtable hashtable = new Hashtable();
47797b4324124913087a765a307de863.gif

三、如何添加和删除

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

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

四、如何遍历

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

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

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

f586cb33c8fc07a95872b4bc9c616db3.png
04ad74dc3ebcca2ce05b9956681fed28.gif

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

五、判断是否包含有某项

使用Contains方法进行处理:

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

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

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项");    }}
85044111073913015ffcf73f94402924.gif

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

dadf344016c725f6fb2a6cc6ca39ee1f.png
6e43f53587d29a0f2ba52c81740dd246.gif

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

Hashtable hashtable = System.Collections.Hashtable.Synchronized(new Hashtable());
35c430c245c6d24daae37774975477cc.gif

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

七、与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则是按你加入的先后顺序读取的。

祝您用餐愉快。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值