《Hashtable(散列表)》--- 集合
Hashtable将添加的元素存放在System.Collections.DictionaryEntry对象里,因此使用foreach或者IEnumerator的Current属性时,都应该将Hashtable中的元素转换为DictionaryEntry对象。可以使用键值作为索引来往问Hashtable中的元素,当检索值时,健再次被散列,并将得到的散列值作为索引来检索值在表中的位置。
Add方法用来将健/值对添加到Hashtable中,即健被散列,散列值作为值插入表中的位置,用来标识存储位置,Hashtable的健不能为空但是值可以是空引用。
首先演示一下Hashtable的使用:
using System;
using System.Collections;
namespace HashtableTest
{
class Test
{
public static void Judgevalue(Hashtable table)
{
if (table.ContainsKey("Wednesday"))
{
Console.WriteLine("table中包含健Wednesday");
}
else
{
Console.WriteLine("table中不包含健Wednesday");
}
if (table.ContainsValue("星期三"))
{
Console.WriteLine("table中包含值星期三");
}
else
{
Console.WriteLine("table中不包含值星期三");
}
}
static void Main(string[] args)
{
Hashtable table=new Hashtable();
table.Add("Sunday","星期天");
table.Add("Monday", "星期一");
table.Add("Tuesday", "星期二");
table["Wednesday"] = "星期三";
Console.WriteLine("table中的元素数量为{0}", table.Count);
Console.WriteLine("Tuesday对应的值为{0}",table["Tuesday"]);
Console.WriteLine("table中的所有元素包括:");
IEnumerator e = table.GetEnumerator();
while (e.MoveNext())
{
DictionaryEntry de = (DictionaryEntry)e.Current;
Console.WriteLine("{0}-{1}",de.Key,de.Value);
}
Judgevalue(table);
Console.WriteLine("删除Wednesday-星期三");
table.Remove("Wednesday");
Judgevalue(table);
table.Add("Thursday","星期四");
table.Add("Firday", "星期五");
table.Add("Saturday", "星期六");
Console.WriteLine("扩容后:");
Console.WriteLine("table中的元素数量为{0}", table.Count);
Console.WriteLine("table中的所有元素包括:");
e = table.GetEnumerator();
e.Reset();//return to seat
while (e.MoveNext())
{
DictionaryEntry de = new DictionaryEntry();
Console.WriteLine("{0}-{1}",de.Key,de.Value);
}
Console.ReadKey();
}
}
}
使用Add方法添加元素的时候,当添加的元素在表中存在时,Add会引发异常,而使用键值作为索引则只是将旧值换新值。例如:
using System;
using System.Collections;
namespace HashtableTEST
{
class Test
{
static void Main()
{
Hashtable table = new Hashtable();
Console.WriteLine("使用Add方法添加:");
table.Add("Sunday", "星期天");
table.Add("Monday", "星期一");
table.Add("Tuesday", "星期二");
table.Add("Wednesday", "星期三");
table.Add("Thursday", "星期四");
table.Add("Friday", "星期五");
table.Add("Saturday", "星期六");
Console.WriteLine("表中的元素为:");
IEnumerator e = table.GetEnumerator();
while (e.MoveNext())
{
DictionaryEntry de = (DictionaryEntry)e.Current;
Console.WriteLine("{0}-{1}",de.Key,de.Value);
}
Console.WriteLine();
try
{
table.Add("Wednesday", "周三");
//当添加的元素的健值在表中存在时为引发异常
}
catch (Exception ex)
{
Console.WriteLine("发生异常"+ex.Message);
}
Console.WriteLine("表中的元素为:");
e = table.GetEnumerator();
e.Reset();
while (e.MoveNext())
{
DictionaryEntry de = (DictionaryEntry)e.Current;
Console.WriteLine("{0}-{1}", de.Key, de.Value);
}
Console.WriteLine();
try
{
table["Wednesday"] = "周三";//不会引发异常
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
e = table.GetEnumerator();
e.Reset();
while (e.MoveNext())
{
DictionaryEntry de = (DictionaryEntry)e.Current;
Console.WriteLine("{0}-{1}", de.Key, de.Value);
}
Console.ReadKey();
}
}
}