(教学思路 C#集合二)哈希表

这一节我们来学习第二种集合,因为它的特性,可以提供一种相当有效率的搜索方法,所以在实际项目中非常实用,它就是哈希表。哈希继 承了IDictionary接口,IDictionary接口提供了key(键)/value(值)集合设计模式,这种类集合中的每个一个对象都包含一个与它相对应的 key,可以通过所指定的key找到集合中所对应的对象(value值),这个接口最重要之处在于定义了公共属性Item、values、keys,其中Item根 据指定的key返回集合中所对应的值,values用来返回集合中所有的对象元素,keys则返回集合中的所以key,现在你们就把key想象成存放值的 “索引值”,通过这个“索引值”可以找到值。除了哈希表有这种键值对的访问机制外,下一节我们也将学习到一种 SortList 类,它是键/值条目和一个ArrayList集合的组合体,实现了二元搜索,性能更加强大。接下来,我们就来理解一下什么是键值对的访 问机制,同时利用实例理解哈希与HashTable类。

哈希提供了一种类似字典的数据结构,原理是通过哈希函数是一个映象,即:将关键字的 集合映射到某个地址集合上,它的设置很灵活,只要这个地址集合的大小不超出允许范围即可。将集合中元素的key值经过哈希函数转换成对应 表格中的索引值,该类的表格称为哈希表,通过哈希函数的使用,键值对应到一个称为哈希码的值,再通过这个哈希码形成的索引地址,找到 指定的对象元素即value值。下面我们来看一下哈希的知识要点:

哈希表是键/值对的集合 ,这些键值对根据键的哈希代码进行组织, 根据键可以查找到相应的值。

这个要点我就不再解释了,你们要记住的是,对哈希的操作内部机制实质上都是对键的操作。

键 不能为空或重复,value值可以。键、值可以为任意数据类型。

因为是对键的操作,所以就要求key值的唯一性,同时任何数据类型都可 以存放在哈希表中,而且对键值对的操作也是严格根据其数据类型进行的。比如key值是整型1和字符串类型的1,所查找的value值的索引地址 是不同的,这一点必须严格执行。

动态存放键/值对,容量根据实际需要自动增加。

HashTable类所创建的集合对象,容量也是 依据需要而自动增加的,它的扩充会比ArrayList更加科学,不会成倍增长,而是根据加载因子来决定,这个因子决定集合在填充多少元素时, 才继续扩充其容量。

定义哈希表对象的语法是Hashtable hstb = new Hashtable();

常用的属性

hstb.Count哈希表中键 值对的元素个数,这两种的用法和ArrayList相同,我们着重理解的是下面两个HashTable类的属性:

hstb.keys取得集合中的键值集合 ; hstb. Values返回相对的数值集合对象。这两个都是根据对象的元素得来的,是只读属性,无法修改它们的结果。

常用方法

增加元素-在增加哈希表元素的时候,有两种方式,第一种是hstb.Add(key,value)一定要键值对的形式同时增加用“,”隔开;第 二种是通过键获取值的形式添 加,同时这种格式也可以修改指定的键中的值,然后存储在哈希对象hstb中,格式是hstb[key]=value;应注意 键和值的数据类型。

删除元素-删除元素用两种hstb.Clear();全部删除,第二种是根据键删除元素hstb.Remove(key);

查找元素 - hstb.Contains(key)、 hstb.ContainsKey(key)查看是否包含指定的键,

hstb.ContainsValue(Value)是否包含指定的值,返 回的都是true或false,体现查询结果。

遍历元素-遍历有两种形式,第一种:哈希的元素是一个键值对,DictionaryEntry类型是一个 键值对的集合,使用这个类型的对象来进行遍历hstb对象

如:foreach (DictionaryEntry jzd in hstb ) 遍历出的对象是一个哈希的 键值对,然后利用jzd .Key取得键 ,jzd .Value取得值。

第二种遍历是遍历出keys或Values的集合的每个键或值,如  foreach( object k in hstb .Keys )或foreach( objectv in hstb .Values )

注意:因为键或值的数据类型可以为任意类型,所以遍历出集合 后,存放键或值的变量的数据类型最好为object型,此类型包含任何一个类型。

时间: 2025-01-21 02:43:11

(教学思路 C#集合二)哈希表的相关文章

(教学思路 C#数组二)数组的属性、foreach遍历、交错数组与矩形数组的区别

本次课我们要学习数组的属性.foreach的用法.我上节课提到的交错数组,我会通过多个例子的演示讲解让你们理解交错数组定义已经与规则的二维数组(矩形数组)的区别加深理解,下一节我们还将学习数组的常用方法. 下面我们来学习一下数组的属性,什么是属性呢?在以后学习类的时候我会给大家详细的讲解,现在我给你们举个现实生活的例子,帮助你们理解什么叫属性,属性一般都是名词,表示它的所有者(即对象)拥有的特性,如抹布(对象)的颜色.大小(属性),而下一节将学习的数组的方法一般是动词,如抹布的功能,抹布(对象)

(教学思路 C#集合一)集合的概述、动态数组ArrayList

这一节我们来学习集合,什么是集合呢? 集合就如同数组,用来存储和管理一组特定类型的数据对象,除了基本的数据处理功能,集合直 接提供了各种数据结构及算法的实现,如队列.链表.排序等,可以让你轻易地完成复杂的数据操作.在使用数组和集合时要先加入 system.collections命名空间,它提供了支持各种类型集合的接口及类.集合本身上也是一种类型,基本上可以将其作为用来存储一组数据对 象的容器,由于c#面向对象的特性,管理数据对象的集合同样被实现成为对象,而存储在集合中的数据对象则被称为集合元素.

哈希表(Hashtable)

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

在C#中应用哈希表

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

数据结构教程 第三十二课 哈希表(一)

教学目的: 掌握哈希表的概念作用及意义,哈希表的构造方法 教学重点: 哈希表的构造方法 教学难点: 哈希表的构造方法 授课内容: 一.哈希表的概念及作用 一般的线性表,树中,记录在结构中的相对位置是随机的,即和记录的关键字之间不存在确定的关系,因此,在结构中查找记录时需进行一系列和关键字的比较.这一类查找方法建立在"比较"的基础上,查找的效率依赖于查找过程中所进行的比较次数. 理想的情况是能直接找到需要的记录,因此必须在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使每个关键

数据结构教程 第三十三课 哈希表(二)

教学目的: 掌握哈希表处理冲突的方法及哈希表的查找算法 教学重点: 哈希表处理冲突的方法 教学难点: 开放定址法 授课内容: 一.复习上次课内容 什么是哈希表?如何构造哈希表? 提出问题:如何处理冲突? 二.处理冲突的方法     成绩一 成绩二... 3 ...     ... ...     24 刘丽 82 95 25 ...     26 陈伟     ... ...     33 吴军     ... ...     42 李秋梅     ... ...     46 刘宏英    

将一个二维数组转换为 hashmap 哈希表

/**  * 将一个二维数组转换为 hashmap  *  * 如果省略 $val 参数,则转换结果每一项为包含该项所有数据的数组.  *  * @param array $arr  * @param string $keyField  * @param string $val  *  * @return array  */ function arrHash(& $arr, $keyField, $val = null) {     $ret = array();     if ($val) {

PHP哈希表碰撞攻击原理

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

云计算设计模式(十二)——索引表模式

云计算设计模式(十二)--索引表模式 创建索引过的被查询条件经常被引用的数据存储等领域.这种模式可以通过允许应用程序更快速地定位数据来从数据存储中检索提高查询性能. 背景和问题 许多数据存储通过使用主键组织为实体的集合的数据.应用程序可以使用此键来查找和检索数据.图1显示了一个数据存储区保持顾客的信息的例子.主键是客户ID. 图1  - 按主键组织的客户信息(客户ID) 而主键是该取基于该关键字的值的数据的查询宝贵的,应用程序可能不能够使用主键是否需要基于其它字段来检索数据.在顾客例如,应用程序