1)文笔有限,如果发现博客有书写有误的地方恳请读者直言不讳,我一定会第一时间改正。
2)代码的具体实现可以参考代码中的注释,如果由于注释不清楚而不明白相应原理,可以与作者私聊。码字不易,有兴趣的小伙伴点个赞呗,大家相互学习。
3)本篇博客为数据结构系列第四部分:散列,如需了解数据结构的其它部分,欢迎点击链接。
传送门:
1 定义
散列表(Hash table,也叫哈希表),是根据 Key-Value
而直接进行访问的数据结构。也就是说,它通过把Key-Value
映射到表中一个位置来访问记录,以加快查找的速度。
这个映射函数叫做散列函数,存放记录的数组叫做哈希表。
2 为什么需要散列这种数据结构
为什么使用哈希表呢?在平常的数据管理中,我们常常将数据放在数据库中,但数据库实际上是一个硬盘,如果直接从 Java 程序向数据库中存取数据的速度会比较慢,这个时候,我们有两种方法来解决这个问题。
- 使用现在的缓存产品,比如Redis或者Mencache;
- 自己写哈希表。
之所以这两种方式方式会更快,是因为它们是存储在内存中的,相比于硬盘,存取速度会更快。
哈希表(Hashtab)由以下部分组成,存放链表的数组,以及存放数据的链表,而数据存放的链表在数据中的索引则由散列函数得到。 图解如下:
3 实例分析
实例:将某学校的学生信息存入到某一数据结构中,信息包括 id、姓名,实现该系统的增、查与遍历。要求: 不使用数据库,速度越快越好。
思路分析:见上图。
代码实现:
import java.util.Scanner;
/**
* 需求:利用哈希表(散列表)的方法来管理学生信息,不使用数据库的方式
*/
public class StudentManageWindow {
public static void main(String[] args) {
//创建哈希表
Hashtab hashTab = new Hashtab(7);
//写一个简单的菜单
String key = "";
Scanner scanner = new Scanner(System.in);
while(true) {
System.out.println("add: 添加雇员");
System.out.println("list: 显示雇员");
System.out.println("find: 查找雇员");
System.out.println("exit: 退出系统");
key = scanner.next();