Java哈希表及其应用
来源:互联网 发布:编程的那些事儿(10 编辑:程序博客网 时间:2024/06/05 08:54
哈希表也称为散列表,是用来存储群体对象的集合类结构。
什么是哈希表
数组和向量都可以存储对象,但对象的存储位置是随机的,也就是说对象本身与其存储位置之间没有必然的联系。当要查找一个对象时,只能以某种顺序(如顺序查找或二分查找)与各个元素进行比较,当数组或向量中的元素数量很多时,查找的效率会明显的降低。
一种有效的存储方式,是不与其他元素进行比较,一次存取便能得到所需要的记录。这就需要在对象的存储位置和对象的关键属性(设为 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 所示。
哈希表的创建也可以通过 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
- Java哈希表及其应用
- java入门教程-9.6Java哈希表及其应用
- java向量及其应用
- Java反射及其应用
- java字符串及其应用
- Java Mail API及其应用
- Java 异常处理及其应用
- Java 异常处理及其应用
- Java 异常处理及其应用
- Java 异常处理及其应用
- java 反射机制及其应用
- Java 异常处理及其应用
- java join 原理 及其应用
- Java Bean 简介及其应用
- Java 异常处理及其应用
- Java 序列化及其应用
- JAVA 栈数据结构及其应用
- Java File类及其应用
- 字符串练习——用不同的方法实现字符串平移问题
- 欢迎使用CSDN-markdown编辑器
- 【NOIP2017模拟A组模拟8.5】带权排序
- 求凸包 cogs896
- Lintcode各位相加
- Java哈希表及其应用
- Android Studio 应用程序管理功能思路与代码
- 【CUGBACM15级BC第14场 B】Harry And Dig Machine
- 【hautoj 1282】ykc想吃好吃的 【循环最大字段和】
- P2161 [SHOI2009]Booking 会场预约
- 论mysql死锁的切入点以及解决方法
- ARM开发板运行执行文件,找不到库报错的解决方法
- JZOJ5230. 【NOIP2017模拟A组模拟8.5】队伍统计
- 编程模拟五