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; } } } }