哈希表
1.什么是哈希表?
哈希表是一种数据结构,它提供了快速的插入操作和查找操作。其基于数组来实现。
2.哈希化
1)直接将关键字作为索引。
2)将单词转换成索引。
<1>将字母转换成ASCII码,然后进行相加
<2>幂的连乘
<3>压缩可选值
3.压缩后仍然可能出现的问题。
冲突:不能保证每个单词都映射到数组的空白单元。
解决办法:
<1>开放地址法
<2>链地址法
/**
* 员工信息类
* @author Administrator
*
*/
public class Info {
private String key;
private String name;
public Info(String key, String name) {
this.key = key;
this.name = name;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
import java.math.BigInteger;
public class HashTable {
private Info[] arr;
/**
* 默认的构造方法
*/
public HashTable() {
arr = new Info[100];
}
/**
* 指定数组初始化大小
*/
public HashTable(int maxSize) {
arr = new Info[maxSize];
}
/**
* 插入数据
*/
public void insert(Info info) {
arr[hashCode(info.getKey())] = info;
}
/**
* 查找数据
*/
public Info find(String key) {
return arr[hashCode(key)];
}
public int hashCode(String key) {
// int hashVal = 0;
// for(int i = key.length() - 1; i >= 0; i--) {
// int letter = key.charAt(i) - 96;
// hashVal += letter;
// }
// return hashVal;
BigInteger hashVal = new BigInteger("0");
BigInteger pow27 = new BigInteger("1");
for(int i = key.length() - 1; i >= 0; i--) {
int letter = key.charAt(i) - 96;
BigInteger letterB = new BigInteger(String.valueOf(letter));
hashVal = hashVal.add(letterB.multiply(pow27));
pow27 = pow27.multiply(new BigInteger(String.valueOf(27)));
}
return hashVal.mod(new BigInteger(String.valueOf(arr.length))).intValue();
}
}
public class TestHashTable {
public static void main(String[] args) {
HashTable ht = new HashTable();
ht.insert(new Info("a","张三"));
ht.insert(new Info("ct","李四"));
ht.insert(new Info("wangwu","王五"));
System.out.println(ht.find("a").getName());
System.out.println(ht.find("ct").getName());
}
}
分享到:
相关推荐
Java数据结构 线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构
数据结构(Java语言描述) 单元设计_单元8 哈希表.doc 学习资料 复习资料 教学资源
哈希表,也被称为散列表,是数据结构中一种高效的数据存储和检索工具。它通过哈希函数将数据的关键字映射到一个固定大小的数组中,使得在平均情况下,查找、插入和删除操作的时间复杂度可以达到O(1)。这种高效的性能...
在 Java 中,哈希表可以用来实现各种数据结构,如 HashSet、HashMap 等。这些数据结构都使用哈希表来存储和查询数据,从而提高了系统的性能。 哈希表是一种非常有用的数据结构,它的优点是查找速度快、时间算法...
这个压缩包包含三个文件:`HashTable.java`、`Info.java`和`TestHashTable.java`,分别代表哈希表的实现、存储的数据结构以及测试类。 `HashTable.java`可能是实现哈希表的主要类,它可能包含了哈希表的基本操作,...
Java的`java.util`包中提供了多种数据结构,其中哈希表(`Hashtable`)作为一种高效的键值对存储方式,在许多场景下被频繁使用。然而,对于特定的数据输入模式,传统的哈希表实现可能会遇到性能瓶颈。本文将深入探讨...
哈希表,又称为散列表,是数据结构中一种高效的数据存储方式,它通过特定的哈希函数将关键字(key)映射到一个固定大小的数组(也称为哈希表或槽位)中,以此实现快速查找、插入和删除操作。在浙大的这组经典数据...
哈希表,也被称为散列表,是数据结构中一种高效的数据存储方式,它通过特定的哈希函数将关键字(key)映射到一个固定大小的数组中,从而实现了快速的查找、插入和删除操作。在计算机科学中,哈希表是解决“查找问题...
哈希表是一种高效的数据结构,它通过特定的算法(哈希函数)将数据映射到一个固定大小的数组中,从而实现快速的插入、查找和删除操作。在Java中,`HashTable`是早期版本(Java 1.0)提供的一种线程安全的哈希表实现...
《Java数据结构和算法中文第二版》是一本深入探讨Java编程中数据结构和算法的书籍。数据结构是计算机科学的基础,它涉及到如何有效地组织和存储数据,以便在各种操作下高效地访问和修改。算法则是解决问题的具体步骤...
通过深入理解和实践这道题,你不仅能巩固哈希表的基础知识,还能提升对数据结构设计的理解,这对于Java程序员的面试和日常工作都非常有帮助。在准备面试时,结合LeetCode上的其他题目进行练习,能更好地提高解决问题...
资源摘要信息是关于Java数据结构和算法的知识点总结,涵盖了数组、栈与队列、链表、递归、哈希表、高级排序、二叉树、红黑树、堆、带权图等数据结构和算法概念。 一、数组 * 数组是相同类型变量的集合,可以使用...
哈希表是一种高效的数据结构,它通过散列函数将键(key)映射到一个固定大小的数组(也称为散列表)中。在Java中,常见的哈希表实现是`java.util.HashMap`类。在提供的代码示例中,作者自定义了一个简单的哈希表`...
Java数据结构是计算机科学中的重要课程,主要探讨如何有效地存储和组织数据,以便进行高效的操作。这门课程通常包括数组、链表、栈、队列、树、图、哈希表等多种数据结构,并深入讲解它们的特性、操作方法以及在实际...
Java作为一种广泛应用的面向对象的语言,提供了丰富的内置数据结构,如数组、链表、集合、栈、队列、哈希表等。在这个名为"Java_Datastructure.rar"的压缩包中,我们主要关注的是"java 哈希"和"java 哈希表"的相关...
哈希表是一种高效的数据结构,广泛应用于数据存储和查找操作。在数据结构课程设计中,哈希表的设计是重要的实践环节,能够帮助学生深入理解哈希函数、冲突解决策略以及动态调整等核心概念。以下是针对哈希表设计问题...
### 哈希表的数据结构详解 #### 一、引言 哈希表是一种非常高效且常用的数据结构,它能够实现快速查找、插入与删除操作。哈希表结合了数组和链表的优点,使得在大多数情况下,其平均时间复杂度接近O(1),即常数时间...
### Java中的哈希表:深度解析与应用 #### 关于哈希:压缩映射与高效检索 哈希,又称散列,是一种将任意长度的输入转换为固定长度输出的算法,这一过程通常被称为`hashcode = hash(key)`。在Java中,哈希表通过...
"Java数据结构实例"这个主题,旨在通过具体的代码实例帮助初学者掌握数据结构的基本概念和使用方式,以此来提升编程思维和问题解决能力。在这个压缩包文件中,我们可以预期找到一些用Java实现的数据结构的源代码。 ...
Java数据结构是编程领域中的重要概念,它涉及如何在内存中高效地组织和管理数据,以便于快速访问和操作。本课件详细介绍了Java中常用的数据结构,包括数组、链表、栈、队列、树、图以及哈希表等。下面我们将逐一深入...