key elements: underlying array and a hash function
when you want to insert an object and its key, the hash function maps the key to an integer, which indicates the
index in the array. The object is then stored at that index.
Implementation
one:
extremely large array, the result of the function can not be duplicated. (high space complexity)
search time complexity are: O(1).
two:
the result of the function can be duplicated, then, smaller array, each index points to an linked list.(each
position is hash(key)%array_length)
search time complexity is: O(n/array_length).
three:
using a tree to store the indexes and objects, if it is balanced tree, time complexity is O(logn).
1, use what strategy to implement the hash function?
division, mid-square, folding, digit analysis
2, how to deal with overflow?
open addressing, chaining
package topic_1;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
//Version one: no collision
//public class HashImplementation {
// private List<Integer> list;
// private static final int mode=12;
// HashImplementation(){
// list=new ArrayList<Integer>(mode);
// int m=0;
// while(m<mode){
// list.add(null);
// m++;
// }
// }
//
// public void put(int key){
// int index=hashFunction(key);
// list.set(index, key);
// }
//
// public boolean hasKey(int key){
// int index=hashFunction(key);
// if(list.get(index)!=null&&list.get(index)==key){
// return true;
// }
// return false;
// }
//
// private int hashFunction(int key){
// return key%mode;
// }
//
// public int size(){
// return list.size();
// }
//}
//Version two: has collision
//solution one: open addressing
//public class HashImplementation {
// private List<Integer> list;
// private static final int mode = 12;
//
// HashImplementation() {
// list = new ArrayList<Integer>(mode);
// int m = 0;
// while (m < mode) {
// list.add(null);
// m++;
// }
// }
//
// public void put(int key) {
// int index = hashFunction(key);
// while(list.get(index)!=null){
// //has collision
// //solution one: open addressing
// index=hashFunction(index+1);
//
// }
// list.set(index, new Integer(key));
// }
//
// public boolean hasKey(int key) {
// int index = hashFunction(key);
// while(list.get(index)!=null){
// if(list.get(index)==key){
// return true;
// }
// index=hashFunction(index+1);
// }
// return false;
// }
//
// private int hashFunction(int key) {
// return key % mode;
// }
//
// public int size() {
// return list.size();
// }
//}
//Version three: has collision
//solution two: chaining
public class HashImplementation {
private List<LinkedList<Integer>> list;
private static final int mode = 12;
HashImplementation() {
list = new ArrayList<LinkedList<Integer>>(mode);
int m = 0;
while (m < mode) {
list.add(null);
m++;
}
}
public void put(int key) {
int index = hashFunction(key);
if(list.get(index)==null){
LinkedList<Integer> llist=new LinkedList<Integer>();
llist.add(key);
list.set(index,llist);
}else{
LinkedList<Integer> ll=list.get(index);
ll.offer(key);
}
}
public boolean hasKey(int key) {
int index = hashFunction(key);
if(list.get(index)==null){
return false;
}else{
LinkedList<Integer> llist=list.get(index);
for(int i=0;i<llist.size();i++){
Integer ints=llist.get(i);
if(key==ints){
return true;
}
}
return false;
}
}
private int hashFunction(int key) {
return key % mode;
}
public int size() {
return list.size();
}
}
分享到:
相关推荐
Hash表是一种数据结构,它通过使用哈希函数将键(key)映射到数组的索引位置,从而实现快速的查找、插入和删除操作。在C语言中,我们可以利用结构体和指针来构建一个简单的Hash表。下面将详细介绍Hash表的概念、哈希...
Hash表应用 (必做) (查找) [问题描述] 设计散列表实现身份证查找系统,对身份证号进行Hash。 [基本要求] (1) 设每个记录有下列数据项:身份证号码(虚构,位数和编码规则与真实一致即可)、姓名、地址; ...
"基于HASH表和SYN计算的TCP包重组方法"是一种优化的重组策略,旨在提高数据恢复的效率和准确性。 TCP报文段重组的核心是确保数据的正确性和完整性。在传统的TCP实现中,通常使用滑动窗口协议来跟踪接收到的报文段,...
在"hash表模板类"这个压缩包中,你可能找到了一个实现了以上功能的C++源文件。通过阅读和理解代码,你可以学习到自定义哈希表的实现细节。此外,附带的测试代码和可运行文件可以帮助你验证该哈希表模板类的正确性,...
在STM32F407上实现的哈希(Hash)算法是数字签名、数据完整性验证等安全应用中的关键组成部分。哈希算法能够将任意长度的输入数据转化为固定长度的输出,通常称为哈希值或消息摘要。 哈希算法的主要特性包括: 1. *...
封装hashtable的两级hash表,两个键值索引和访问。适合存放稀疏数据,如稀疏矩阵,稀疏表等结构,由于提供key-value的索引遍历,数据稀疏的情况下,相比于传统矩阵遍历的速度更快。
哈希表(Hash Table)是一种数据结构,它通过计算一个关联数组中的索引来确定一个特定元素的存储位置,使得在平均情况下,查找、插入和删除操作的时间复杂度达到O(1)。C语言中的哈希表实现是程序员常用的数据结构...
Hash表是一种在计算机科学中广泛使用的数据结构,它通过一种特定的哈希函数将键(Key)映射到数组的索引位置,从而实现快速的查找、插入和删除操作。在游戏开发,尤其是在大型在线游戏中,高效的数据存储和检索对于...
"Hash表的建立和查找" Hash表是一种高效的数据结构,它通过哈希函数将关键字映射到索引上,以便快速地存储和查找数据。Hash表的建立和查找是数据结构课程的重要内容,本文将详细介绍Hash表的建立和查找的知识点。 ...
### 打造最快的Hash表(和Blizzard的对话) #### Hash表基础知识与应用场景 本文将深入探讨如何构建高效的Hash表,并特别关注Blizzard在游戏开发过程中所采用的技术。Hash表是一种利用散列函数来实现快速查找的数据...
该文档消息描述了hash表的创建、数据插入、数据删除、数据查找以及hash表销毁等操作
链地址Hash表的代码实现 链地址Hash表是一种常用的Hash算法,它的优点在于可以快速查找数据,同时占用的内容空间也非常小。 链地址Hash表的实现可以分为四个步骤: 1. 定义Hash表和基本数据节点 在这里,...
在编程领域,哈希表(Hash Table)是一种高效的数据结构,它通过特定的哈希函数将数据映射到一个固定大小的数组中,以实现快速的查找、插入和删除操作。哈希表的关键在于设计良好的哈希函数,该函数能够尽可能均匀地...
hash表操作函数 HASH_ADD_INT HASH_ADD_STR
Hash表采用了数组加链表的结构,即一个数组元组中不再是存储单个元素,而是存储一个链表,就好比包租婆收租的时候,一个握把上面挂了一连串的钥匙一样。Hash表的引出是为了减少查询数据库操作所带来的时间问题,将...
哈希表(Hash Table)是一种数据结构,它通过哈希函数将输入(通常是字符串)映射到一个固定大小的数组的索引上,使得数据的查找、插入和删除操作能够达到近乎常数时间的复杂度,即O(1)。在编程中,哈希表的高效性能...
`study-hash`这个文件可能是对哈希表学习的代码实现,包括了哈希函数的设计、冲突处理方法的实现,以及可能的一些性能测试。通过阅读和理解这个程序,你可以更深入地掌握哈希表的工作原理和实际运用。在实践中,不断...
数据结构第16次作业,hash表 Spellchecking Prerequisites, Goals, and Outcomes Prerequisites: Students should have mastered the following prerequisite skills. • Hash Tables - Understanding of the ...