初涉Hashtable寄语

由于近段时间培训内容涉及到Hashtable方面的知识,由于培训仅仅起到一个引导的作用,加之以前又接触得少,因此对Hashtable这个东东蛮陌生,呵呵,今晚木有事儿就一起来学习一下吧,更欢迎大神进来批评指正

什么是Hashtable

我们从字面意思就可以猜到Hashtable就是哈希表,它是通过类实现一个哈希表,里面存着一个个的键值对,哈希表可以将键映射到相应的值。Hashtable是一个容器,我们可以使用key来快速查找相应的值。并且在Hashtable中key和value均为object类型,也就是说Hashtable可以支持任何类型。

对Hashtable方法的简单操作

对于Hashtable进行一些简单的操作,罗列一下下,特别提醒使用Hashtable时必须引用System.Collections命名空间

         static void Main(string[] args)
{
Hashtable ht = new Hashtable();
ht.Add("Name1","断桥残雪1");
ht.Add("Name2", "断桥残雪2");
ht.Add("Name3", "断桥残雪3");
string j=ht["Name3"].ToString();
ht.Remove("Name2");
Console.WriteLine(j);
j = ht["Name2"].ToString(); //运行出错
Console.WriteLine(j);
Console.ReadKey();
}

Hashtable中我们可以添加一个键值对、移除一个键值对、移除所有键值对、判断哈希表中是否包含某个键值对。以上方法都蛮简单,就是有一点需要注意:使用Hashtabel对象的事例查找值时不要想当然的去弄出个Hashtable[0]这个东东,表面上编译木有问题,可是运行时问题就来了,会提示“未将对象引用设置到对象的实例”,大家要注意咯,所谓键值对嘛,最终需要用键去获取值,不能用索引,这儿也木有索引这么个说法!这句话不对,感谢园友提醒,其实如果key值为数值是可以使用Hashtable[0]来获取其value的,不过不推荐这么写,索引一多容易混淆。

对Hashtable属性的简单操作

关于Hashtable属性也不多,看下图:

亲自试验,加深印象:

         static void Main(string[] args)
{
Hashtable ht = new Hashtable();
ht.Add("Name1", "断桥残雪1");
ht.Add("Name2", "断桥残雪2");
ht.Add("Name3", "断桥残雪3");
ht.Add("Name4", "断桥残雪4");
ht.Add("Name5", "断桥残雪5"); int count = ht.Count;
Console.WriteLine("Hashtable一共有" + count + "组键值对");
bool isFixedSize = ht.IsFixedSize;
Console.WriteLine("Hashtable是否具有固定大小:" + isFixedSize);
bool isReadOnly = ht.IsReadOnly;
Console.WriteLine("Hashtable是否只读:" + isReadOnly);
ICollection keys = ht.Keys;
ICollection values = ht.Values;
foreach (var item in keys)
{
Console.WriteLine(item);
}
foreach (var item in values)
{
Console.WriteLine(item);
}
Console.ReadKey();
}

结果如下:

对Hashtable的遍历<非常实用>

既然我们前面就说了Hashtable是一个容器,那么我们就应该可以对其进行遍历,获取其所有的键和值,于是在木有看相关知识前我想当然的写下了如下代码:

             foreach (var myitem in ht)
{
Console.WriteLine(myitem.Key + "-" + myitem.Value);
}

很显然试过后错误很明显,压根编译都不能通过。那么我们我们如何才能够遍历Hashtable中的键值对呢,通过上网查资料知道了些

             foreach (DictionaryEntry myitem in ht)
{
Console.WriteLine(myitem.Key + "-" + myitem.Value);
}

我们可以使用DictionaryEntry结构,通过它可以设置或检索的字典键/值对,不过在这里使用foreach读取哈希表中的键值有点需要知道,foreach 语句是对枚举数的包装,它只允许从集合中读取,不允许写入集合。所以我们再次设置键值对的值会编译时报错

结语

双休就这么过去了,新的工作日又来了,也有更多的挑战等着我,继续吧,菜鸟成长ing

------如果你觉得此文对你有所帮助,别忘了点击下右下角的推荐咯,谢谢!------

C#中Hashtable容器的了解与使用的更多相关文章

  1. (转)Java中的容器详细总结

    Java中的容器详细总结(编辑中) 原文链接:http://anxpp.com/index.php/archives/656/ 注:本文基于 Jdk1.8 编写 通常程序总是根据运行时才知道的某些条件 ...

  2. 理解Docker(6):若干企业生产环境中的容器网络方案

    本系列文章将介绍 Docker的相关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...

  3. .Net 中HashTable,HashMap 和 Dictionary<key,value> 和List<T>和DataTable的比较

    参考资料 http://www.cnblogs.com/MichaelYin/archive/2011/02/14/1954724.html http://zhidao.baidu.com/link? ...

  4. java中的容器问题

    小小的总结一下java中的容器问题. 一.三个知识点 1.迭代器 1).java.util.Interator + hasnext(); next(); remove(); 2).java.lang. ...

  5. C#中Hashtable、Dictionary详解以及写入和读取对比

    转载:http://www.cnblogs.com/chengxingliang/archive/2013/04/15/3020428.html 在本文中将从基础角度讲解HashTable.Dicti ...

  6. Docker学习笔记 - 在运行中的容器内启动新进程

    docker psdoker top dc1 # 容器情况# 在运行中的容器内启动新进程docker exec [-d] [-i] [-t] 容器名 [command] [args]docker ex ...

  7. Java EE中的容器和注入分析,历史与未来

    Java EE中的容器和注入分析,历史与未来 java中的容器 java中的注入 容器和注入的历史和展望 一.java中的容器 java EE中的注入,使我们定义的对象能够获取对资源和其他依赖项的引用 ...

  8. STL中的容器介绍

    STL中的容器主要包括序列容器.关联容器.无序关联容器等. 一]序列容器 (1) vector vector 是数组的一种类表示,提供自动管理内存的功能,除非其他类型容器有更好满足程序的要求,否则,我 ...

  9. kubernetes中infra容器的理解

    1. infra容器和用户容器的关系 1.1 pause 是k8s的基础设施的一部分,pod中其他容器通过pause容器跟其他pod进行通信. 1.2 pod中其他容器跟pause容器共享命名空间1. ...

随机推荐

  1. UI3_UITableViewDelete(多选)

    // AppDelegate.m // UI3_UITableViewDelete(多选) // // Created by zhangxueming on 15/7/14. // Copyright ...

  2. (转)Centos5.5安装MONO2.10.8和Jexus 5.0开启Linux平台.net应用新篇章

    注:本文只做本人记录使用,也可供大家参考,有兴趣的可以一起讨论. 安装步骤 1.yum –y update 2.安装Mono源码安装需要的库 yum -y install gcc gcc-c++ bi ...

  3. 6款基于SVG的HTML5应用和动画

    1.HTML5 SVG 3D蝴蝶飞舞动画 逼真超酷 这次我们要分享的这款HTML5动画简直就是逆天,利用SVG制作的3D蝴蝶飞舞动画,蝴蝶飞舞动画非常逼真,蝴蝶飞舞的路线是利用SVG构造的.另外,动画 ...

  4. A@2a139a55 结果产生的原因

    程序代码: public class ExplorationJDKSource { /** * @param args */ public static void main(String[] args ...

  5. Toad for Oracle 快捷键

    F4 看表的结构 F5 执行对话框中的SQL,注意最后需要以;结尾 F7 清除当前编辑框中所有的sql F8 查看历史的sql语句 F9 执行当前行的sql F10 看菜单 Ctrl + F12 保存 ...

  6. c/c++面试总结(3)

    7.vector和list的区别(这个也算是经常问的) vector和数组类似,拥有一段连续的内存空间,并且起始地址不变,这样对随机的读取很有效率(就是我们所有的[]运算符了),因为内存是连续的如果我 ...

  7. [笔记] MySql Workbench 导出表结构和数据报错 mysqldump: [ERROR] unknown variable 'delayed-insert=FALSE'

    下午使用MySql Workbench导出数据库表结构,设置完导出选项后执行导出,报如下错误: :: Dumping nacweixindb (tb_app) Running: mysqldump.e ...

  8. 运行yum报错Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again

    今天给Centos通过rpm -Uvh装了个epel的扩展后,执行yum就开始报错: Error: Cannot retrieve metalink for repository: epel. Ple ...

  9. js javascript:void(0) 真正含义

    我想使用过ajax的都常见这样的代码:<a href="javascript:doTest2();void(0);">here</a>但这儿的void(0) ...

  10. .NET开发作业调度(job scheduling) - Quartz.NET

    Quartz.NET是JAVA Job Scheduling框架Quartz在.NET平台上的实现,可以满足小型乃至大型企业应用中的Job Scheduling. 通过Nuget安装Quartz.NE ...