博客說明java
文章所涉及的資料來自互聯網整理和我的總結,意在於我的學習和經驗彙總,若有什麼地方侵權,請聯繫本人刪除,謝謝!數組
哈希表底層是數組加鏈表或者是數組加二叉樹,一個數組裏面有多個鏈表,經過散列函數來提升效率網絡
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; } }
感謝數據結構
尚硅谷函數
萬能的網絡學習
以及勤勞的本身
關注公衆號: 歸子莫,獲取更多的資料,還有更長的學習計劃ui