這篇文章主要介紹“什么是哈希表”,在日常操作中,相信很多人在什么是哈希表問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”什么是哈希表”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
創(chuàng)新互聯(lián)主要從事成都網(wǎng)站制作、網(wǎng)站設(shè)計、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)什邡,10年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792
散列表(Hash Table,也叫哈希表),是根據(jù)關(guān)鍵碼值(Key Value)而直接進行訪問的數(shù)據(jù)結(jié)構(gòu)。也就是說,它通過把關(guān)鍵碼值映射到表中的一個位置來訪問記錄,以加快查找的速度。這個映射函數(shù)叫做散列函數(shù),存放記錄的數(shù)組叫做散列表
有一個公司,當有新員工來報到時,要求將該員工的信息加入(id,性別,年齡,地址….),當輸入該員工的id時,要求查找該員工的所有信息。
要求:不使用數(shù)據(jù)庫,盡量節(jié)省內(nèi)存,速度越快越好。
package com.xie.hashtable; import java.util.Scanner; public class HashTableDemo { public static void main(String[] args) { //創(chuàng)建一個HashTab 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("delete:刪除雇員"); System.out.println("exit:退出程序"); key = scanner.next(); switch (key) { case "add": System.out.println("輸入id"); int id = scanner.nextInt(); System.out.println("輸入name"); String name = scanner.next(); Emp emp = new Emp(id, name); hashTab.add(emp); break; case "list": hashTab.list(); break; case "find": System.out.println("請輸入編號"); int no = scanner.nextInt(); hashTab.findEmpById(no); break; case "delete": System.out.println("請輸入編號"); int deleteNo = scanner.nextInt(); hashTab.deleteEmpById(deleteNo); break; case "exit": scanner.close(); System.exit(0); break; default: break; } } } } //創(chuàng)建哈希表,管理多條鏈表 class HashTab { private int size; private EmpLinkedList[] empLinkedListArray; 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) { //根據(jù)員工的id,得到該員工應(yīng)當添加到哪條鏈表 int empLinkedListNo = hashFun(emp.id); //將emp添加到對應(yīng)的鏈表 empLinkedListArray[empLinkedListNo].add(emp); } //查找員工 public Emp findEmpById(int id) { int no = hashFun(id); Emp empById = empLinkedListArray[no].findEmpById(id); if (empById == null) { System.out.println("不存在id=" + id + "元素"); return null; } else { System.out.println("存在id=" + id + ",name=" + empById.name); return empById; } } //刪除雇員 public void deleteEmpById(int id) { int no = hashFun(id); empLinkedListArray[no].deleteEmp(id); } //遍歷哈希表 public void list() { for (int i = 0; i < size; i++) { empLinkedListArray[i].list(i); } } //編寫散列函數(shù),使用簡單的取模法 private int hashFun(int id) { return id % size; } } //表示雇員 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 + '\'' + '}'; } } //表示鏈表 class EmpLinkedList { //頭指針 private Emp head; //添加雇員到鏈表 //說明: //1.當添加雇員時,id時自增的,即id分配總是從小到大,因此我們將該雇員直接加到本鏈表的最后即可 public void add(Emp emp) { //如果是添加第一個雇員 if (head == null) { head = emp; } else { Emp curr = head; while (true) { if (curr.next == null) { break; } curr = curr.next; } curr.next = emp; } } //遍歷 public void list(int no) { if (head == null) { System.out.println("第" + (no + 1) + "鏈表為空"); return; } System.out.print("第" + (no + 1) + "鏈表信息為:"); Emp curr = head; while (true) { if (curr != null) { System.out.printf("=> id=%d,name=%s\t", curr.id, curr.name); curr = curr.next; } else { break; } } System.out.println(); } //根據(jù)id查找雇員 public Emp findEmpById(int id) { if (head == null) { System.out.println("鏈表為空"); return null; } Emp temp = head; while (temp != null) { if (temp.id == id) { return temp; } temp = temp.next; } return null; } //根據(jù)id刪除雇員 public void deleteEmp(int id) { if (head == null) { System.out.println("沒有id=" + id + "的雇員"); return; } Emp curr = head; boolean flag = false; while (true) { if (curr == null) { break; } if (curr.next.id == id) { flag = true; break; } curr = curr.next; } if (flag) { curr.next = curr.next.next; } else { System.out.println("沒有id=" + id + "的雇員"); } } }
到此,關(guān)于“什么是哈希表”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
本文題目:什么是哈希表
地址分享:http://jinyejixie.com/article46/iisjhg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、自適應(yīng)網(wǎng)站、全網(wǎng)營銷推廣、企業(yè)建站、外貿(mào)建站、網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)