哈希表:使用键来访问集合中的元素。
定义
几种基本的语法格式:
一:初始化新的空实例 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