C# 三十二、Hashtable(哈希表)

哈希表:使用键来访问集合中的元素。

定义

几种基本的语法格式:

一:初始化新的空实例 System.Collections.Hashtable 类使用默认的初始容量、 加载因子、 哈希代码提供程序和比较器。

   Hashtable 标识符 = new Hashtable();

二:初始化新的空实例 System.Collections.Hashtable 类使用指定的初始容量和默认加载因子、 哈希代码提供程序和比较器。

  Hashtable 标识符 = new Hashtable(指定的初始容量);

三:新实例初始化 System.Collections.Hashtable 类将从指定字典的元素复制到新 System.Collections.Hashtable对象。 新 System.Collections.Hashtable 对象拥有与复制的元素数相等的初始容量并使用默认加载因子、 哈希代码提供程序和比较器。

  Hashtable 标识符 = new Hashtable(其元素被复制到新哈希表的原表);

四、初始化新的空实例 System.Collections.Hashtable 类使用指定的初始容量和加载因子,默认哈希代码提供程序和比较器。

  Hashtable 标识符 = new Hashtable(指定的初始容量,x);

                x:0.1 到 1.0 范围内的数字,再乘以提供最佳性能的默认值。 结果是元素与存储桶的最大比率。

加载因子:

  • 确定元素与Hashtable 可拥有的元素数的最大比率。
  • 加载因子越小,平均查找速度越快,但消耗的内存也增加。默认的加载因子 0.72通常提供速度和大小之间的最佳平衡。当创建 Hashtable 时,也可以指定其他加载因子。
  • 当向 Hashtable 添加元素时,Hashtable 的实际加载因子将增加。当实际加载因子达到指定的加载因子时,Hashtable 中存储桶的数目自动增加到大于当前 Hashtable 存储桶数两倍的最小素数。

Hashtable 类的一些常用的属性

public virtual bool IsReadOnly { get; }

官方摘要:获取一个值,该值指示 System.Collections.Hashtable 是否为只读。

返回结果:bool值:如果 System.Collections.Hashtable  是只读的,则为 true;否则为 false。 默认值为 false。

简单理解:判断是否只读。

代码示例:

Hashtable hashtable = new Hashtable();

Console.WriteLine(hashtable.IsReadOnly);

--->
False

public virtual bool IsFixedSize { get; }

官方摘要:获取一个值,该值指示 System.Collections.Hashtable 是否具有固定大小。

返回结果:如果System.Collections.Hashtable 具有固定大小,则为true ;否则为 false。 默认值为 false。

简单理解:获取一个值,表示 Hashtable 是否具有固定大小。

代码示例:

Hashtable hashtable = new Hashtable();

Console.WriteLine(hashtable.IsFixedSize);

--->
False

public virtual int Count { get; }

官方摘要:获取包含在 System.Collections.Hashtable 中的键/值对的数目。

返回结果:包含在 System.Collections.Hashtable 中的键/值对的数目。

简单理解:获取Hashtable 中包含的键值对个数。

代码示例:

Hashtable hashtable = new Hashtable();
hashtable.Add(1, "a");
hashtable.Add(2, "b");
Console.WriteLine(hashtable.Count);

--->
2

Hashtable 类的一些常用的方法

public virtual void Add(object key, object value);

官方摘要:将带有指定键和值的元素添加到 System.Collections.Hashtable 中。

参数说明:

  • key:要添加的元素的键。
  • value:要添加的元素的值。 该值可以为 null。

简单理解:向 Hashtable 添加一个带有指定的键和值的元素。

代码示例:

Hashtable hashtable = new Hashtable();
hashtable.Add(1, "a");
hashtable.Add(2, "b");

foreach (DictionaryEntry item in hashtable)
{
    Console.WriteLine(item.Key);
    Console.WriteLine(item.Value);
}

--->
2
b
1
a

public virtual void Clear();

官方摘要:从 System.Collections.Hashtable 中移除所有元素。

简单理解:从 Hashtable 中移除所有的元素。

代码示例:

Hashtable hashtable = new Hashtable();

hashtable.Add(1, "a");
hashtable.Add(2, "b");

hashtable.Clear();

hashtable.Add(3, "c");
hashtable.Add(4, "d");

foreach (DictionaryEntry item in hashtable)
{
    Console.WriteLine(item.Key);
    Console.WriteLine(item.Value);
}

--->
4
d
3
c

public virtual bool Contains(object key);

官方摘要:确定 System.Collections.Hashtable 是否包含特定键。

参数说明:

  • key:要在 System.Collections.Hashtable 中定位的键。

返回结果:如果System.Collections.Hashtable包含具有指定键的元素,则为true ;否则为 false。

简单理解:判断 Hashtable 是否包含指定的键。

代码示例:

Hashtable hashtable = new Hashtable();

hashtable.Add(1, "a");
hashtable.Add(2, "b");
hashtable.Add(3, "c");
hashtable.Add(4, "d");

Console.WriteLine(hashtable.Contains(2));

--->
True

public virtual bool ContainsKey(object key);

官方摘要:确定 System.Collections.Hashtable 是否包含特定键。

参数说明:

  • key:要在 System.Collections.Hashtable 中定位的键。

返回结果:如果System.Collections.Hashtable包含具有指定键的元素,则为true ;否则为 false。

简单理解:判断 Hashtable 是否包含指定的键。

代码示例:

Hashtable hashtable = new Hashtable();

hashtable.Add(1, "a");
hashtable.Add(2, "b");
hashtable.Add(3, "c");
hashtable.Add(4, "d");

Console.WriteLine(hashtable.ContainsKey(2));

--->
True

public virtual bool ContainsValue(object value);

官方摘要:确定 System.Collections.Hashtable 是否包含特定值。

参数说明:

  • value:要在 System.Collections.Hashtable 中定位的值。 该值可以为 null。

返回结果:如果System.Collections.Hashtable 包含具有指定的元素value,则为true;否则为 false。

简单理解:判断 Hashtable 是否包含指定的值。

代码示例:

Hashtable hashtable = new Hashtable();

hashtable.Add(1, "a");
hashtable.Add(2, "b");
hashtable.Add(3, "c");
hashtable.Add(4, "d");

Console.WriteLine(hashtable.ContainsValue("c"));

--->
True

public virtual void CopyTo(Array array, int arrayIndex);

官方摘要:副本 System.Collections.Hashtable 元素到一维 System.Array 实例的指定索引位置。

参数说明:

  • array:一维 System.Array 的目标 System.Collections.DictionaryEntry 从复制对象 System.Collections.Hashtable。
    System.Array 必须具有从零开始的索引。
  • arrayIndex:array 中从零开始的索引,从此处开始复制。

简单理解:将Hashtable元素复制到一维数组。

代码示例:

Hashtable hashtable = new Hashtable();

hashtable.Add(1, "a");
hashtable.Add(2, "b");
hashtable.Add(3, "c");
hashtable.Add(4, "d");

object[] arr = new object[4];
hashtable.CopyTo(arr,0);

foreach (DictionaryEntry item in arr)
{
    Console.WriteLine(item.Key);
    Console.WriteLine(item.Value);
}

--->
4
d
3
c
2
b
1
a

public virtual void Remove(object key);

官方摘要:从 System.Collections.Hashtable 中移除带有指定键的元素。

参数说明:

  • key:要移除的元素的键。

简单理解:从 Hashtable 中移除带有指定的键的元素。

代码示例:

Hashtable hashtable = new Hashtable();

hashtable.Add(1, "a");
hashtable.Add(2, "b");
hashtable.Add(3, "c");
hashtable.Add(4, "d");

hashtable.Remove(3);

foreach (DictionaryEntry item in hashtable)
{
    Console.WriteLine(item.Key);
    Console.WriteLine(item.Value);
}

--->
4
d
2
b
1
a

通过键名获取值:

名字[键名]

哈希表中的键不可修改,只能修改键对应的值。如果对不存在的键设置值,将添加新的键值对。

名字[键名]=新的值;

Hashtable遍历:

注意:Hashtable的每个元素都是一个键/值对,因此,元素类型既不是键的类型,也不是值的类型,而是DictionaryEntry类型。

Hashtable hashtable = new Hashtable();

hashtable.Add(1, "a");
hashtable.Add(2, "b");
hashtable.Add(3, "c");
hashtable.Add(4, "d");
hashtable.Add(5, "e");

foreach (DictionaryEntry item in hashtable)
{
    Console.WriteLine(item.Key);
    Console.WriteLine(item.Value);
}

Console.ReadKey();     

--->
5
e
4
d
3
c
2
b
1
a

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值