哈希表(限定版)

目录

 今日良言:既然没有女朋友,那就安心敲代码

一、效果展示

1.添加员工

2.显示员工

3.查找员工

4.删除员工

二、实现思路

1.总体思路分析

2.针对员工相关操作分析

三、完整代码


 今日良言:既然没有女朋友,那就安心敲代码

七夕没情人,不如敲代码,一行行代码不也是程序员的专属浪漫吗? 

一、效果展示

1.添加员工

 

2.显示员工

3.查找员工

4.删除员工

二、实现思路

1.总体思路分析

首先,我们对哈希表进行一个简单的介绍:散列表 (Hash table,也叫哈希表),是根据关键码值 (Key value)而直接进行访问的 数据结构 。 也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。 这个映射函数叫做 散列函数 ,存放记录的 数组 叫做 散列表 。

本文章的哈希表主要是为了解决google之前的一个上机题,题目如是说:有一个员工,当有新的员工表来报道时,要求将该员工的信息(id、年龄、姓名、地址等)加入,当输入该员工的id 时,希望查找到员工的所有信息。要求:不使用数据库,尽量节省内存,速度越快越好。  

这种要求下,可以使用哈希表。如下图:

通过观察,我们先来分析一下我们需要使用到的一些知识点,每一个员工的信息是一个结点,因此,我们可以创建一个类Node,作为员工信息:

其次 ,使用链表来实现哈希表,每条链表不带头结点,然后在该链表中实现增、删、查等操作。

然后,我们创建一个类HashTab类来管理这些链表,如下图:

这里用图解再分析一下哈希表:(这张图是本文精华所在,需要细细品味) 

通过上图,我们可以分析出,哈希表(HashTab类)中有一个数组存放所有链表,传入一个size(作为链表数组长度),如下图:

然后我们需要根据一个散列函数确定每次需要进行操作的是哪个链表,我们使用的是简单取模法作为散列函数。

需要注意的是,必须将每条链表都实例化,否则会出错,如下图:

还需要注意的是,对链表的所有操作需要放入到哈希表中。 

2.针对员工相关操作分析

首先,根据之前我们之前学习过的知识,我们需要先创建一个结点类和一个链表类,然后创建好成员方法和成员属性,然后再链表中创建增、删、查、打印等方法,这里主要分析对于哈希表的操作。

我们在上面已经提到过了,在哈希表中我们使用取模法作为散列函数,然后我们逐步分析对于链表的操作。

增加员工

当传入一个员工结点,我们首先需要通过取模法判断我们需要对哪条链表进行操作,然后调用该条链表的添加员工方法,传入员工结点,进行操作。如下图:

链表中的添加员工结点代码:

 删除员工

首先,我们传入一个参数id 作为要删除的对象,我们也需要进行取模操作,这样我们可以在取模后的这条链表中进行删除该id操作,具体对于结点的删除操作我们放到了链表中。如下图:

链表中的删除员工代码:

 查找员工

传入一个id作为我们要查找的对象,第一步进行的操作依旧是取模法,根据取模后的链表进行操作,我们传入id,让链表中的查找操作进行判断,如果查找到的话就返回该员工的信息,如果查找不到就返回null , 然后我们可以通过接收所调用链表的查找方法的返回值是否为空进行判断,不为空就打印该员工的信息,如下图:

 链表中的代码:

打印链表

我们已经知道总共有size条链表,然后我们就可以通过循环进行打印链表操作,传入i值作为链表下标,如下代码:

 链表操作:

 三、完整代码

我将完整代码放到了github中,下面是链接,需要的朋友可以自己取哦

java-/哈希表 at master · mhy2656810734/java- (github.com)


版权声明:本文为qq_54469537原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。