哈希表可以快速成堆的检索数据,与Vector一样动态存储一系列对象,而且我们必须为存储的每一个
值都要安排关键字与之关联。 添加数据使用put(key, value),取出数据使用get(key),Hashtable
通过initial capacity和load factor两个参数调整性能。通常缺省的load factor装载因子它是一个
百分比,表明了哈希表何时需要扩充,例如,有一哈希表,容量为100,而装载因子为0.9,那么当哈希
表90%的容量已被使用时,此哈希表会自动扩充成一个更大的哈希表。如果用户不赋这些参数,系统会自
动进行处理,而不需要用户操心。一般情况下0.75较好地实现了时间和空间的均衡。增大load factor
可以节省空间但相应的查找时间将增大,这会影响像get和put这样的操作。 所以我们在最初设计时候必
须确定自己所需要的空间大小。
由于作为key的对象将通过计算我们制定的函数所谓(散列函数)来确定与之对应的value的位置,因
此任何作为key的对象都必须实现hashCode和equals方法。hashCode和equals方法继承自根类Object
但是同时我们要注意:如果用自定义的类当作key的话,要相当小心,按照散列函数的定义,如果两个
对象相同,即obj1.equals(obj2)=true,则它们的hashCode必须相同,但如果两个对象不同,则它们
的hashCode不一定不同,如果两个不同对象的hashCode相同,这种现象称为冲突,冲突会导致操作哈希
表的时间开销增大,所以尽量定义好的hashCode()方法,能加快哈希表的操作。
蒙了吧:呵呵其实总结起来无非一句话:哈希表就是能够快速成堆的查找数据,增大了效率,兼顾了
数组与链表的特色。
随附自己的哈希表:
public void add(String s){
82. if(sum>=name.length/2){
83. this.rehash();
84. }
85. int start = hash1(s);
86. int i = start;
87. while(name[i]!=null){
88. if(s.equals(name[i])){
89. return;
90. }
91. i = (i+hash2(s))%name.length;
92. if(i == start){
93. return;
94. }
95. }
96. name[i] = s;
97. sum++;
98. }
/**
116. * 删除某个元素
117. * @param s
118. */
119. public void remove(String s){
120. if(this.contains(s)){
121. int i = this.getValue(s);
122. this.name[i] = null;
123. }
124. }
125.
126. /**
127. * 得到字符s在哈希表中的位置
128. * @param s
129. * @return
130. */
131. public int getValue(String s){
132. int start = this.hash1(s);
133. int i = start;
134. while(this.name[i]!=null){
135. if(this.name[i].equals(s)){
136. return i;
137. }
138. i = (i+this.hash2(s))%this.name.length;
139. if(i==start){
140. return -1;
141. }
142.
143. }
144. return -1;
145. }
146.
147. /**
148. * 输出哈希表所有的元素
149. */
150. public void print(){
151. for(int i=0;i<name.length;i++){
152. System.out.println(i+":"+name[i]);
153. }
154. }
155.
156. /**
157. * 得到哈希表存贮的元素个数
158. * @return
159. */
160. public int size(){
161. return this.sum;
162. }
163.
164. /**
165. * 得到哈希表的长度
166. * @return
167. */
168. public int length(){
169. return this.name.length;
170. }
分享到:
相关推荐
哈希表课程设计数据结构实验报告——哈希表设计 针对某个集体中的人名设计一个哈希表,使得平均查找长度不超过R,完成相应的建立和查表程序. 1.2 人名为汉语拼音形式,最长不超过18个字符(如:庄双双 ...
哈希表是一种高效的数据结构,它通过特定的函数——哈希函数,将任意大小的键(key)映射到一个固定大小的数组中,从而实现快速的查找、插入和删除操作。这种数据结构的设计旨在解决在大量数据中查找特定元素的问题...
第二步:实现哈希表的基本操作,包括创建哈希表、销毁哈希表、查找哈希表、插入哈希表等。 第三步:实现哈希函数,使用除留余数法构造哈希函数,并使用伪随机探测再散列法处理冲突。 第四步:实现查找算法,使用...
哈希表是一种高效的数据结构,它通过特定的函数——哈希函数,将任意大小的键(key)映射到一个固定大小的数组中,从而实现快速查找、插入和删除操作。在“数据结构哈希表设计实验报告”中,我们可能会涉及到以下几...
////采用除留余数法定义哈希表,哈希表长度为10,哈希函数为H(key)=key%13。产生冲突时采用线性探测法实现下面要求的功能。 ////(1)初始化哈希表,置空哈希表 ////(2)在哈希表中查找元素 ////(3)在哈希表中...
哈希表,也被称为散列表,是计算机科学中一种非常重要的数据结构,它提供了一种高效的数据存储和检索方法。哈希表通过将键(Key)映射到一个索引位置来实现快速访问,这个索引位置是通过哈希函数计算得出的。哈希...
哈希表是一种高效的数据结构,它通过特定的函数(哈希函数)将数据映射到一个固定大小的数组中,以此实现快速的查找、插入和删除操作。在C语言中,我们可以手动构建哈希表来处理这些操作。Code::Blocks是一款流行的...
哈希表是一种高效的数据结构,它通过特定的函数——哈希函数,将数据映射到一个固定大小的数组中,以此实现快速的插入、查找和删除操作。在本主题中,我们将深入探讨哈希表的建立和查找过程,以及相关的算法和设计...
哈希表是一种高效的数据结构,它通过特定的算法——哈希函数,将任意大小的键(key)映射到一个固定大小的数组中,从而实现快速查找、插入和删除操作。在C语言中,实现哈希表需要理解其基本原理,并掌握如何利用...
数据结构中的哈希表是一种高效的数据存储和检索结构,它通过特定的哈希函数将关键字映射到数组的索引位置,实现快速访问。在这个实验报告中,我们关注的是如何构建哈希表并进行基本操作,包括插入、删除、查找等。 ...
哈希表设计程序设计+数据结构实验报告 1.1 针对某个集体中的人名设计一个哈希表,使得平均查找长度不超过R,完成相应的建立和查表程序. 1.2 人名为汉语拼音形式,最长不超过18个字符(如:庄双双 zhuangshuangshuang)...
哈希表是一种高效的数据结构,它通过特定的哈希函数将键(key)映射到一个固定大小的数组中,以此实现快速的插入、查找和删除操作。在本例中,我们关注的是如何利用链地址法来处理哈希冲突。 哈希函数是哈希表的...
"大数据结构课程设计--哈希表实验报告材料" 在大数据结构课程设计中,哈希表实验报告材料是非常重要的一部分。本文档将详细介绍哈希表的设计和实现,包括哈希函数的构造、冲突处理、查找算法等。 一、哈希表的设计...
哈希表应用 设计哈希表实现图书查找系统,完成相应的建表和查表程序。从键盘输入各图书相关信息,分别以图书编号为关键字建立散列表。待填入哈希表的书号至少30个;构造合适的哈希函数。 (1)记录由外部输入。 (2...
/为班级30个人的姓名设计一个哈希表,假设姓名用汉语拼音表示。要求用除留余数法 构造哈希函数,用线性探测再散列法处理冲突,平均查找长度的上限为2。 编写数据结构和算法来实现。要求:将哈希函数和处理冲突方法...
哈希表是一种在计算机科学中广泛使用的数据结构,它的主要目的是快速查找、插入和删除元素。在这个特定的C++程序中,哈希表被用来实现一个数字排序算法,特别是针对大整数范围内的数据。程序的目标是处理多组测试...
在这个"哈希表源代码"压缩包中,我们可以期待找到实现哈希表的源代码,这对于理解哈希表的工作原理以及在实际编程中应用哈希表非常有帮助。 哈希表的基本概念: 1. 键值对:哈希表由一系列键值对组成,每个键对应...
哈希表是一种高效的数据结构,它通过特定的算法——哈希函数,将任意大小的键(key)映射到一个固定大小的数组中,从而实现快速查找、插入和删除操作。在本项目中,我们将深入探讨哈希表如何用于管理用户名和密码。 ...
哈希表的设计与实现课程设计 问题描述:针对某个单位电话号码簿,设计一个哈希表,并完成相应的建表和查表程序。 基本要求:设每个记录有下列数据项:电话号码、用户名、住址。从键盘输入各记录,以用户名为关键字...