alicelmx 2020-05-26
什么是哈希表

其实可以这样理解,哈希表就像一个缓冲层

下面来看一个案例

大致可以分析如下

package hashTable;
import java.util.Scanner;
//表示一个雇员
class Emp{
public int id;
public String name;
public Emp next;
public Emp(int id, String name) {
this.id = id;
this.name = name;
}
}
//表示链表
class EmpLinkedList{
private Emp head; //默认为null
//add
public void add(Emp emp)
{
//如果是添加第一个
if(head ==null)
{
head=emp;
return;
}
//不是第一个
Emp temp = head;
while (true)
{
if(temp.next==null)
{
//说明到最后了
break;
}
temp=temp.next; //后移
}
//while退出时一定为最后,指向加入链表就行了
temp.next=emp;
}
public void show(){
if(head==null)
{
System.out.println("当前链表为空");
return;
}
System.out.println("当前链表信息为");
Emp temp=head;
while (true)
{
System.out.printf("=>id=%d name=%s \t",temp.id,temp.name);
if (temp.next == null) {
break;
}
temp=temp.next;//后移即++
}
System.out.println();//换行
}
}
//创建hash表,管理多条链表,如图那样
class HashTab{
private EmpLinkedList [] empLinkedListArray;
private int size;
//构造器
public HashTab(int size)
{
this.size=size;
empLinkedListArray = new EmpLinkedList[size];
for(int i=0;i<size;i++)
{
empLinkedListArray[i]=new EmpLinkedList();
}
}
//添加员工
public void add(Emp emp)
{
int empNo=hashFunc(emp.id);
empLinkedListArray[empNo].add(emp);
}
public void show(){
for (int i=0;i<size;i++)
{
empLinkedListArray[i].show();
}
}
public int hashFunc(int id)
{
return id%size; //通过模判断在hash表的位置
}
}
public class hashTableDemo {
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("show:显示雇员");
System.out.println("exit:退出");
key = scanner.next();
switch (key)
{
case "add":
System.out.println("输入id");
int id = scanner.nextInt();
System.out.println("输入名字");
String name = scanner.next();
Emp emp = new Emp(id,name);
hashTab.add(emp);
break;
case "show":
hashTab.show();
break;
case "exit":
scanner.close();
break;
default:
break;
}
}
}
}
