本章学习目录
一,哈希表的介绍
- 哈希表:散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。
- 组成:由数组和链表结合
二,哈希表的图解
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/901f11bd59c5da875eecb6a065e7adb5.png)
三,哈希表的链表部分
public class Emp {
public int id;
public String name;
public Emp next;
public Emp(int id, String name) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "Emp{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
public class EmpLinkedList {
private Emp head;
public void add(Emp emp){
if (head==null){
head=emp;
return;
}
Emp temp=head;
while (temp.next!=null){
temp=temp.next;
}
temp.next=emp;
}
public void list(){
if (head==null){
System.out.println("该链表为空");
return;
}
Emp temp=head;
System.out.print("该链表信息为:");
while (temp!=null){
System.out.print("==>"+temp.id);
temp=temp.next;
}
System.out.println();
}
public Emp findByid(int id){
if (head==null){
return null;
}
Emp temp=head;
while (temp.id!=id){
temp=temp.next;
if (temp==null){
return null;
}
}
return temp;
}
}
四,哈希表的实现类
public class HashTab {
EmpLinkedList[] empLinkedListArr;
private int size;
public HashTab(int size) {
this.size = size;
empLinkedListArr=new EmpLinkedList[size];
for (int i = 0; i <size ; i++) {
empLinkedListArr[i]=new EmpLinkedList();
}
}
public void add(Emp emp){
int Arrnum=hashFun(emp.id);
empLinkedListArr[Arrnum].add(emp);
}
private int hashFun(int id){
return id%size;
}
public void list(){
for (int i = 0; i <size ; i++) {
empLinkedListArr[i].list();
}
}
public void findEmpBYId(int id){
int empArr = hashFun(id);
Emp byid = empLinkedListArr[empArr].findByid(id);
if (byid!=null){
System.out.println(byid.toString());
}else {
System.out.println("没有找到该节点");
}
}
}
五,结果测试展示
HashTab hashTab = new HashTab(7);
Emp emp1=new Emp(7,"aa");
Emp emp5=new Emp(14,"aa");
Emp emp2=new Emp(8,"bb");
Emp emp3=new Emp(9,"cc");
Emp emp4=new Emp(10,"cc");
hashTab.add(emp1);
hashTab.add(emp2);
hashTab.add(emp3);
hashTab.add(emp4);
hashTab.add(emp5);
hashTab.list();
System.out.println("-----------");
hashTab.findEmpBYId(11);
hashTab.findEmpBYId(10);
hashTab.findEmpBYId(9);
hashTab.findEmpBYId(8);
hashTab.findEmpBYId(7);
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/1798584f12399ba606ba2f941694a8ea.png)