哈希表又称为散列函数,作用为读取数据中的缓冲层的概念,可以通过关键码值来访问一系列的信息,特点是速度快。其中包含了链表,所以要构建链表
import java.util.Scanner;
class emp{
public int id;
public String name;
public emp next;//这里定义了一个指针
public emp(int id,String name)
{
super();
this.id=id;
this.name=name;
}
}
class emplinkedlist
{
//head指针直接指向第一个雇员
private emp head=null;
//当添加雇员时,id自增长,id从小到大,雇员加在链表最后
public void add(emp emp)
{
if(head==null)//当是第一个雇员,head直接指向第一个雇员
{
head=emp;
return;
}
emp curemp=head;//建立一个临时指针
while(true)
{
if(curemp.next==null)
{
break;
}
curemp=curemp.next;
}
curemp.next=emp;
}
public void list(int no)
{
if(head==null)
{
System.out.println("第"+(no+1)+"表为空");
return;
}
System.out.print("第"+(no+1)+"链表的信息");
emp curemp=head;
while(true)
{
System.out.printf("=>id=%d name =%s\t",curemp.id,curemp.name);
if(curemp.next==null)
{
break;
}
curemp=curemp.next;
}
}
public emp findempbyid(int id)
{
if(head ==null)
{
System.out.println("表为空");
return null;
}
emp curemp=head;
while(true)
{
if(curemp.id==id)
{
break;
}
curemp=curemp.next;
if(curemp.next==null)
{
curemp=null;
break;
}
}
return curemp;
}
}
class hashtable
{
private emplinkedlist[] emplinkedlistarr;
private int size=7;
public hashtable(int size)
{
//进行初始化
emplinkedlistarr=new emplinkedlist[size];
for(int i=0;i<size;i++)
{
emplinkedlistarr[i]=new emplinkedlist();
}
}
public void add(emp emp)
{
//根据id,得知应当添加的位置
int emplinkedlistno=hashfun(emp.id);
emplinkedlistarr[emplinkedlistno].add(emp);
}
public void list()
{
for(int i=0;i<size;i++)
{
emplinkedlistarr[i].list(i);
}
}
public void findempbyid(int id)
{
int emplinkedlistno = hashfun(id);
emp emp=emplinkedlistarr[emplinkedlistno].findempbyid(id);
if(emp !=null)
{
System.out.printf("在第%d条链表中找到了该雇员 id=%d\n",(emplinkedlistno+1),id);
}
else
{
System.out.println("没有找到该雇员");
}
}
public int hashfun(int id)
{
return id%size;
}
}
public class hashtabdemo {
public static void main(String[] args) {
hashtable hashtab = new hashtable(7);
String key="";
Scanner reader = new Scanner(System.in);
while(true)
{
System.out.println("add:添加雇员");
System.out.println("list:遍历雇员");
System.out.println("find:查找雇员");
System.out.println("exit:退出");
key = reader.next();
switch(key)
{
case"add":
System.out.println("输入id");
int id =reader.nextInt();
System.out.println("输入名字");
String name=reader.next();
emp emp=new emp(id,name);
hashtab.add(emp);
break;
case"list":
hashtab.list();
break;
case"find":
System.out.println("输入id");
id =reader.nextInt();
hashtab.findempbyid(id);
break;
case"exit":
reader.close();
System.exit(0);
default:
break;
}
}
}
}