《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();
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?