1.基本介绍
- 散列表(Hash Table),根据关键码值而直接进行访问的数据结构,它通常将关键码映射到表中一个位置来访问记录,以加快查找速度
- 由数组+链表构成
2.例题
一公司,当有新来员工时,将员工信息(id,name…)加入,当输入该员工id时,要查找到该员工的所有信息,要求不使用数据库,且越快越好
public class HashTabDome {
public static void main(String[] args) {
HashTabDome hashDome = new HashTabDome();
HashTab hash = hashDome.new HashTab(7);
Emp emp = hashDome.new Emp(2,"hh");
hash.add(emp);
Emp emp1 = hashDome.new Emp(4,"hh");
hash.add(emp1);
Emp emp2 = hashDome.new Emp(11,"hh");
hash.add(emp2);
hash.list();
System.out.println("=============");
hash.findEmpById(11);
}
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{
private Emp head;
public void add(Emp emp){
if(head==null){
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)+" 条链表为空");
return;
}
System.out.print("第 "+(no)+" 条链表为:");
Emp curEmp = head;
while(true){
System.out.print("id="+curEmp.id+",name="+curEmp.name+"\t");
if(curEmp.next==null){
break;
}
curEmp=curEmp.next;
}
System.out.println();
}
public Emp findEmpById(int id){
if(head==null){
System.out.println("链表为空");
return null;
}
Emp curEmp = head;
while(true){
if(curEmp.id==id){
break;
}
if(curEmp.next==null){
curEmp=null;
break;
}
curEmp=curEmp.next;
}
return curEmp;
}
}
class HashTab{
private EmpLinkedList[] empLinkedList;
private int size;
public HashTab(int size){
this.size=size;
empLinkedList = new EmpLinkedList[size];
for(int i=0;i<empLinkedList.length;i++){
empLinkedList[i]=new EmpLinkedList();
}
}
public void add(Emp emp){
int empLinkedListNo = hashFun(emp.id);
empLinkedList[empLinkedListNo].add(emp);
}
public void list(){
for(int i=0;i<size;i++){
empLinkedList[i].list(i);
}
}
public void findEmpById(int id){
int empLinkedListNo = hashFun(id);
Emp emp=empLinkedList[empLinkedListNo].findEmpById(id);
if(emp!=null){
System.out.println("在第"+empLinkedListNo+"条链表中找到雇员id="+id);
}else{
System.out.println("在哈希表中,没有找到该雇员~");
}
}
public int hashFun(int id){
return id%size;
}
}
}
|