在C#中应用哈希表

      一,哈希表(Hashtable)简述

     在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似key/value的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。Hashtable中key/value键值对均为object类型,所以Hashtable可以支持任何类型的key/value键值对.

       二,哈希表的简单操作

      在哈希表中添加一个key/value键值对:HashtableObject.Add(key,value);
 在哈希表中去除某个key/value键值对:HashtableObject.Remove(key);
 从哈希表中移除所有元素:           HashtableObject.Clear();
 判断哈希表是否包含特定键key:      HashtableObject.Contains(key);
 下面控制台程序将包含以上所有操作:

using System;
using System.Collections; //使用Hashtable时,必须引入这个命名空间
class hashtable
{
  public static void Main()
  {
  Hashtable ht=new Hashtable(); //创建一个Hashtable实例
  ht.Add("E","e");//添加key/value键值对
  ht.Add("A","a");
  ht.Add("C","c");
  ht.Add("B","b");
  string s=(string)ht["A"];
  if(ht.Contains("E")) //判断哈希表是否包含特定键,其返回值为true或false
    Console.WriteLine("the E key:exist");
  ht.Remove("C");//移除一个key/value键值对
  Console.WriteLine(ht["A"]);//此处输出a
  ht.Clear();//移除所有元素
  Console.WriteLine(ht["A"]); //此处将不会有任何输出
  }
}

       三,遍历哈希表

      遍历哈希表需要用到DictionaryEntry Object,代码如下:
 for(DictionaryEntry de in ht) //ht为一个Hashtable实例
 {
   Console.WriteLine(de.Key);//de.Key对应于key/value键值对key
   Console.WriteLine(de.Value);//de.Key对应于key/value键值对value
 }

        四,对哈希表进行排序

       对哈希表进行排序在这里的定义是对key/value键值对中的key按一定规则重新排列,但是实际上这个定义是不能实现的,因为我们无法直接在Hashtable进行对key进行重新排列,如果需要Hashtable提供某种规则的输出,可以采用一种变通的做法:
 ArrayList akeys=new ArrayList(ht.Keys); //别忘了导入System.Collections
 akeys.Sort(); //按字母顺序进行排序
 for(string skey in akeys)
 {
   Console.Write(skey + ":");
   Console.WriteLine(ht[skey]);//排序后输出
 }

 

时间: 2024-11-03 21:57:47

在C#中应用哈希表的相关文章

PHP内核探索之PHP中的哈希表

在PHP内核中,其中一个很重要的数据结构就是HashTable.我们常用的数组,在内核中就是用HashTable来实现.那么,PHP的HashTable是怎么实现的呢?最近在看HashTable的数据结构,但是算法书籍里面没有具体的实现算法,刚好最近也在阅读PHP的源码,于是参考PHP的HashTable的实现,自己实现了一个简易版的HashTable,总结了一些心得,下面给大家分享一下. 笔者github上有一个简易版的HashTable的实现:HashTable实现 另外,我在github有

[PHP内核探索]PHP中的哈希表

在PHP内核中,其中一个很重要的数据结构就是HashTable.我们常用的数组,在内核中就是用HashTable来实现.那么,PHP的HashTable是怎么实现的呢?最近在看HashTable的数据结构,但是算法书籍里面没有具体的实现算法,刚好最近也在阅读PHP的源码,于是参考PHP的HashTable的实现,自己实现了一个简易版的HashTable,总结了一些心得,下面给大家分享一下. 笔者github上有一个简易版的HashTable的实现:HashTable实现 另外,我在github有

php内核解析:PHP中的哈希表_php技巧

PHP中使用最为频繁的数据类型非字符串和数组莫属,PHP比较容易上手也得益于非常灵活的数组类型. 在开始详细介绍这些数据类型之前有必要介绍一下哈希表(HashTable). 哈希表是PHP实现中尤为关键的数据结构. 哈希表在实践中使用的非常广泛,例如编译器通常会维护的一个符号表来保存标记,很多高级语言中也显式的支持哈希表. 哈希表通常提供查找(Search),插入(Insert),删除(Delete)等操作,这些操作在最坏的情况下和链表的性能一样为O(n). 不过通常并不会这么坏,合理设计的哈希

数据结构-C#有什么方法能把数据快速插入哈希表,

问题描述 C#有什么方法能把数据快速插入哈希表, 现在的速度是 4M大小 时间大概是50ms,还有没有能更快的? 解决方案 4M 50ms相当于每秒80M,对于GHz级别的处理器,每次插入也就用了十几个时钟周期,这个速度不低了.如果你有多个处理器,试试看并行算法. 解决方案二: 看一下相关的c#资料可以自己先写一个类,在类中引用哈希表,再在你指定的位置插入.

PHP哈希表碰撞攻击原理

最近哈希表碰撞攻击(Hashtable collisions as DOS attack)的话题不断被提起,各种语言纷纷中招.本文结合PHP内核源码,聊一聊这种攻击的原理及实现. 哈希表碰撞攻击的基本原理 哈希表是一种查找效率极高的数据结构,很多语言都在内部实现了哈希表.PHP中的哈希表是一种极为重要的数据结构,不但用于表示Array数据类型,还在Zend虚拟机内部用于存储上下文环境信息(执行上下文的变量及函数均使用哈希表结构存储). 理想情况下哈希表插入和查找操作的时间复杂度均为O(1),任何

并发数据结构-1.6 哈希表

原文链接,译文链接,译者:iDestiny,校对:周可人 典型可扩展的哈希表即一个可调整大小的桶数组(buckets), 每一个桶存放预期数量的元素,因此哈希表平均在常量时间内进行插入,删除,查询操作.哈希表调整大小的主要成本-–在于新旧桶(buckets)之间进行重新分配操作,该操作被分摊到所有表操作上,所以平均操作时间也是常量的.哈希表调整大小就是扩容,在实践中,哈希表仅需要增加数组大小即可. Michael实现了一个可并发,不可扩展的哈希表(通过对哈希表中每个桶进行读写锁约束).然而,为了

《Redis设计与实现》阅读:Redis底层研究之哈希表hashtable

        字典是一种存储键值对的抽象数据结构,其又被称为符号表(symbol table).关联数组(associative array)或映射(map).Redis使用字典存储键值对,而Redis在底层是通过自定义的哈希表来实现字典这一数据结构的.本文,我们将研究Redis中哈希表的实现.         结构         一个哈希表包含多个哈希表节点,每个哈希表节点保存了字典中的一个键值对.在Redis中,哈希表用dictht表示,其结构如下:         其中,      

PHP内核探索:哈希表碰撞攻击原理_php实例

下面通过图文并茂的方式给大家展示PHP内核探索:哈希表碰撞攻击原理. 最近哈希表碰撞攻击(Hashtable collisions as DOS attack)的话题不断被提起,各种语言纷纷中招.本文结合PHP内核源码,聊一聊这种攻击的原理及实现.  哈希表碰撞攻击的基本原理 哈希表是一种查找效率极高的数据结构,很多语言都在内部实现了哈希表.PHP中的哈希表是一种极为重要的数据结构,不但用于表示Array数据类型,还在Zend虚拟机内部用于存储上下文环境信息(执行上下文的变量及函数均使用哈希表结

AS2.0中实现数据结构-哈希表

数据|数据结构 在游戏制作中我们经常需要存储一些离散的对象数据,比如道具箱里的道具,经常需要执行插入和删除操作,而且道具之间没有联系是无序排列的.有些人会说直接用数组不就得了,但是有大量数据存储时的数组的删除插入操作的效率是很低的.因此我们需要哈希表这样的可以提供快速的插入和删除,查找操作的数据结构,不论哈希表中有多少数据,插入和删除操作只需要接近常量的时间:即O(1)的时间级.既然这么好那么我们的AS可以实现吗?当然可以!AS发展到AS2.0,已经成为在语法上更接近于Java + Pascal