哈希表 底层是 数组加链表 或者是 数组加二叉树 ,一个数组里面有多个链表,通过散列函数来提高效率
package cn.guizimo.hashtab; import java.util.Scanner; /** * @author guizimo * @date 2020/7/23 10:29 下午 */ public class HashTabDemo { 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("list:显示"); System.out.println("find:显示"); 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 "list": hashTab.list(); break; case "find": System.out.println("请输入id"); id = scanner.nextInt(); hashTab.find(id); break; case "exit": scanner.close(); System.exit(0); default: break; } } } } 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 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 empLinkedListNo = hashFun(emp.id); empLinkedListArray[empLinkedListNo].add(emp); } public void find(int id){ int empLinkedListNo = hashFun(id); Emp emp = empLinkedListArray[empLinkedListNo].find(id); if (emp != null){ System.out.printf("在第%d条链表中找到id=%d\n",(empLinkedListNo+1),id); }else { System.out.println("没有找到"); } } //遍历 public void list(){ for (int i = 0; i < size; i++) { empLinkedListArray[i].list(i); } } //散列(取模) public int hashFun(int id){ return id % size; } } 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+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; } System.out.println(); } public Emp find(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; } }
原文链接:https://www.cnblogs.com/guizimo/p/13369611.html