哈希表也称为散列表,是用来存储群体对象的集合类结构。
什么是哈希表
数组和向量都可以存储对象,但对象的存储位置是随机的,也就是说对象本身与其存储位置之间没有必然的联系。当要查找一个对象时,只能以某种顺序(如顺序查找或二分查找)与各个元素进行比较,当数组或向量中的元素数量很多时,查找的效率会明显的降低。
一种有效的存储方式,是不与其他元素进行比较,一次存取便能得到所需要的记录。这就需要在对象的存储位置和对象的关键属性(设为 k)之间建立一个特定的对应关系(设为 f),使每个对象与一个唯一的存储位置相对应。在查找时,只要根据待查对象的关键属性 k 计算f(k)的值即可。如果此对象在集合中,则必定在存储位置 f(k)上,因此不需要与集合中的其他元素进行比较。称这种对应关系 f 为哈希(hash)方法,按照这种思想建立的表为哈希表。
Java 使用哈希表类(Hashtable)来实现哈希表,以下是与哈希表相关的一些概念:
- 容量(Capacity):Hashtable 的容量不是固定的,随对象的加入其容量也可以自动增长。
- 关键字(Key):每个存储的对象都需要有一个关键字,key 可以是对象本身,也可以是对象的一部分(如某个属性)。要求在一个 Hashtable 中的所有关键字都是唯一的。
- 哈希码(Hash Code):若要将对象存储到 Hashtable 上,就需要将其关键字 key 映射到一个整型数据,成为 key 的哈希码。
- 项(Item):Hashtable 中的每一项都有两个域,分别是关键字域 key 和值域 value(存储的对象)。Key 和 value 都可以是任意的 Object 类型的对象,但不能为空。
- 装填因子(Load Factor):装填因子表示为哈希表的装满程度,其值等于元素数比上哈希表的长度。
哈希表的使用
哈希表类主要有三种形式的构造方法:
Hashtable(); //默认构造函数,初始容量为 101,最大填充因子 0.75
Hashtable(int capacity);
Hashtable(int capacity,float loadFactor)
哈希表类的主要方法如表 8-6 所示。
void clear() | 重新设置并清空哈希表 |
boolean contains(Object value) | 确定哈希表内是否包含了给定的对象,若有返回 true,否则返回 false |
boolean containsKey(Object key) | 确定哈希表内是否包含了给定的关键字,若有返回 true,否则返回 false |
boolean isEmpty() | 确认哈希表是否为空,若是返回 true,否则返回 false |
Object get(Object key) | 获取对应关键字的对象,若不存在返回 null |
void rehash() | 再哈希,扩充哈希表使之可以保存更多的元素,当哈希表达到饱和时,系统自动调用此方法 |
Object put(Object key,Object value) | 用给定的关键字把对象保存到哈希表中,此处的关键字和元素均不可为空 |
Object remove(Object key) | 从哈希表中删除与给定关键字相对应的对象,若该对象不存在返回 null |
int size() | 返回哈希表的大小 |
String toString() | 将哈希表内容转换为字符串 |
哈希表的创建也可以通过 new 操作符实现。其语句为:
HashTable has=new HashTable();
【例 8-12】哈希表的遍历。
//********** ep8_12.java **********
import java.util.*;
class ep8_12{
public static void main(String args[]){
Hashtable has=new Hashtable();
has.put("one",new Integer(1));
has.put("two",new Integer(2));
has.put("three",new Integer(3));
has.put("four",new Double(12.3));
Set s=has.keySet();
for(Iterator<String> i=s.iterator();i.hasNext();){
System.out.println(has.get(i.next()));
}
}
}
运行结果:
2
1
3
12.3
http://www.weixueyuan.net/view/6055.html
相关推荐
总的来说,哈希表在Java中是一种非常重要的数据结构,它通过哈希函数和动态扩展的能力,实现了高效的查找和插入操作,广泛应用于各种数据存储和查找场景。理解和熟练使用哈希表对于提高程序的运行效率至关重要。
哈希表,也被称为散列表,是计算机科学中一种非常重要的数据结构,它提供了一种高效的方式来存储和检索数据。哈希表的核心思想是通过一...理解并熟练运用哈希表及其在Java中的实现,对于提升程序的性能和效率至关重要。
拉链法哈希表是一种常见的数据结构,广泛应用于各种编程语言,包括Java。在这个场景中,我们看到一个基于Java的课程设计项目,它利用拉链法实现了一个哈希表,用于电话查询系统的功能。让我们深入了解一下这个主题。...
了解和掌握哈希表及其哈希算法对于任何程序员来说都是至关重要的,无论你是初学者还是资深开发者,都应该深入理解这一数据结构的工作原理和优化技巧。通过实践和学习,你可以创建出更高效、更适应具体场景的哈希表...
本实验通过实际操作加深了对哈希表及其应用的理解。通过编写代码实现了对英文自我介绍中各个单词出现次数的统计,并采用了哈希表加链表的方法来解决冲突问题,这不仅提高了查找效率,还简化了代码的复杂度。此外,...
在实际应用中,哈希表常用于缓存、数据库索引、集合去重等场景。例如,在数据库中,索引可以看作是一个特殊的哈希表,通过键(通常是主键)快速定位数据。在Java编程中,`HashMap`类及其相关的`HashSet`(只存储键,...
leetcode面试题解哈希表第350题两个数组的交集II-题解.zip”指的是一个关于Java编程语言的LeetCode面试题解析,具体是第350题,题目要求解决“两个数组的交集II”的问题,而解题方法主要涉及哈希表的应用。...
本文将重点介绍三种常见的数据结构:线性表、链表及哈希表,并探讨它们在Java中的具体实现。 ### 线性表 线性表是一种线性结构,其特点是数据元素之间存在一对一的线性关系。根据存储结构的不同,线性表可以分为...
本篇文章将详细讲解这两种数据结构及其在Java中的应用,并结合提供的JAR包——jdbm-1.0,探讨如何在实际项目中使用它们。 首先,我们来了解B+树。B+树是一种自平衡的树,适用于大量数据的存储,尤其在数据库和文件...
在Java编程领域,LeetCode是一个非常受欢迎的在线平台,它提供了大量的编程题目,帮助开发者提升算法和数据结构技能。...因此,熟悉并掌握哈希表的特性及其应用,对于任何Java开发者来说都是至关重要的。
这个"java-hash.7z"压缩包包含了一个Java实现的哈希计算工具,这是一份经典的学习资源,可以帮助开发者深入理解哈希算法及其在Java中的应用。 哈希(Hash)函数是一种将任意长度输入(也叫做预映射pre-image)通过...
其中,第187题“重复的DNA序列”是一个涉及到哈希表解决的实际问题,对于理解哈希数据结构及其在解决实际问题中的应用具有重要意义。本题解将深入探讨该问题的解决方案,以及哈希表在Java中的应用。 DNA是由四种...
这道题目涉及到了哈希表这一数据结构的应用,对于理解和掌握哈希表在实际问题中的应用有着很好的实践意义。 题目描述:给定一个整数数组`arr`,返回数组中每个元素出现的唯一次数的数组。例如,如果`arr = [1, 2, 2...
在Java编程中,哈希遍历(Hash Traversal)通常是指对哈希表或映射数据结构(如HashMap)中的键值对进行访问的过程。哈希表是一种高效的数据存储方式,它通过计算对象的哈希码来快速定位数据,使得查找、插入和删除...
这个题目考察的是字符串处理和哈希表的应用,下面我们将详细探讨这个问题。 首先,我们要了解哈希表(HashMap或HashSet)在解决这类问题中的作用。哈希表提供了一种高效的数据结构,可以在常数时间内完成插入、删除...
由于篇幅限制,此处不再展示具体的代码实现细节,但在实际应用中,实现哈希表主要包括定义节点类、哈希表类以及相关的成员方法(如 `put()`、`get()`、`remove()` 等)。需要注意的是,哈希表的设计需要考虑到负载...
在面试中,理解和熟练运用哈希表及其相关概念是至关重要的,因为它们是解决许多复杂问题的基础,比如搜索、统计、去重、关联数据等。熟悉不同编程语言中的哈希表实现,如Python的dict、C++的unordered_map和Java的...
哈希表在Redis中是一个非常实用的数据结构,它可以将多个字段(field)及其对应的值(value)存储为一个单独的键(key)。这样的数据结构特别适合存储对象或者关联数据。 首先,让我们了解`HMSET`命令。`HMSET key ...
`Set`接口的典型实现有`HashSet`(基于哈希表)和`TreeSet`(基于红黑树)。`HashSet`提供快速的插入和查找操作,但不保证元素的顺序;`TreeSet`则会按照元素的自然排序或定制的比较器进行排序。 `List`接口的代表...
本实例将深入探讨几种常见的数据结构及其在Java中的实现,包括数组、链表、栈、队列、集合、映射(哈希表)、图和树等。 首先,数组是最基本的数据结构,它提供了一种存储固定数量相同类型元素的方法。在Java中,...