成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java編程內功-數據結構與算法「哈希表」

開發 后端 算法
散列表(Hash Table,也叫哈希表),是根據關鍵碼值(Key Value)而直接進行訪問的數據結構。

[[388064]]

 基本介紹

散列表(Hash Table,也叫哈希表),是根據關鍵碼值(Key Value)而直接進行訪問的數據結構。也就是說,它通過把關鍵碼值映射到表中的一個位置來訪問記錄,以加快查找的速度。這個映射函數叫做散列函數,存放記錄的數組叫做散列表


Google上機題

有一個公司,當有新員工來報到時,要求將該員工的信息加入(id,性別,年齡,地址….),當輸入該員工的id時,要求查找該員工的所有信息。

要求:不使用數據庫,盡量節省內存,速度越快越好。

  1. package com.xie.hashtable; 
  2.  
  3. import java.util.Scanner; 
  4.  
  5. public class HashTableDemo { 
  6.     public static void main(String[] args) { 
  7.         //創建一個HashTab 
  8.         HashTab hashTab = new HashTab(7); 
  9.  
  10.         String key = ""
  11.         Scanner scanner = new Scanner(System.in); 
  12.         while (true) { 
  13.             System.out.println("add:添加雇員"); 
  14.             System.out.println("list:顯示雇員"); 
  15.             System.out.println("find:查找雇員"); 
  16.             System.out.println("delete:刪除雇員"); 
  17.             System.out.println("exit:退出程序"); 
  18.             key = scanner.next(); 
  19.             switch (key) { 
  20.                 case "add"
  21.                     System.out.println("輸入id"); 
  22.                     int id = scanner.nextInt(); 
  23.                     System.out.println("輸入name"); 
  24.                     String name = scanner.next(); 
  25.                     Emp emp = new Emp(id, name); 
  26.                     hashTab.add(emp); 
  27.                     break; 
  28.                 case "list"
  29.                     hashTab.list(); 
  30.                     break; 
  31.                 case "find"
  32.                     System.out.println("請輸入編號"); 
  33.                     int no = scanner.nextInt(); 
  34.                     hashTab.findEmpById(no); 
  35.                     break; 
  36.                 case "delete"
  37.                     System.out.println("請輸入編號"); 
  38.                     int deleteNo = scanner.nextInt(); 
  39.                     hashTab.deleteEmpById(deleteNo); 
  40.                     break; 
  41.                 case "exit"
  42.                     scanner.close(); 
  43.                     System.exit(0); 
  44.                     break; 
  45.                 default
  46.                     break; 
  47.             } 
  48.         } 
  49.     } 
  50.  
  51. //創建哈希表,管理多條鏈表 
  52. class HashTab { 
  53.     private int size
  54.     private EmpLinkedList[] empLinkedListArray; 
  55.  
  56.     public HashTab(int size) { 
  57.         this.size = size
  58.         empLinkedListArray = new EmpLinkedList[size]; 
  59.         for (int i = 0; i < size; i++) { 
  60.             empLinkedListArray[i] = new EmpLinkedList(); 
  61.         } 
  62.  
  63.     } 
  64.  
  65.     //添加雇員 
  66.     public void add(Emp emp) { 
  67.         //根據員工的id,得到該員工應當添加到哪條鏈表 
  68.         int empLinkedListNo = hashFun(emp.id); 
  69.         //將emp添加到對應的鏈表 
  70.         empLinkedListArray[empLinkedListNo].add(emp); 
  71.     } 
  72.  
  73.     //查找員工 
  74.     public Emp findEmpById(int id) { 
  75.         int no = hashFun(id); 
  76.         Emp empById = empLinkedListArray[no].findEmpById(id); 
  77.         if (empById == null) { 
  78.             System.out.println("不存在id=" + id + "元素"); 
  79.             return null
  80.         } else { 
  81.             System.out.println("存在id=" + id + ",name=" + empById.name); 
  82.             return empById; 
  83.         } 
  84.     } 
  85.  
  86.     //刪除雇員 
  87.     public void deleteEmpById(int id) { 
  88.         int no = hashFun(id); 
  89.         empLinkedListArray[no].deleteEmp(id); 
  90.     } 
  91.  
  92.     //遍歷哈希表 
  93.     public void list() { 
  94.         for (int i = 0; i < size; i++) { 
  95.             empLinkedListArray[i].list(i); 
  96.         } 
  97.     } 
  98.  
  99.     //編寫散列函數,使用簡單的取模法 
  100.     private int hashFun(int id) { 
  101.         return id % size
  102.     } 
  103.  
  104.  
  105. //表示雇員 
  106. class Emp { 
  107.     public int id; 
  108.     public String name
  109.     public Emp next
  110.  
  111.     public Emp(int id, String name) { 
  112.         this.id = id; 
  113.         this.name = name
  114.     } 
  115.  
  116.     @Override 
  117.     public String toString() { 
  118.         return "Emp{" + 
  119.                 "id=" + id + 
  120.                 ", name='" + name + '\'' + 
  121.                 '}'
  122.     } 
  123.  
  124. //表示鏈表 
  125. class EmpLinkedList { 
  126.     //頭指針 
  127.     private Emp head; 
  128.  
  129.     //添加雇員到鏈表 
  130.     //說明: 
  131.     //1.當添加雇員時,id時自增的,即id分配總是從小到大,因此我們將該雇員直接加到本鏈表的最后即可 
  132.     public void add(Emp emp) { 
  133.         //如果是添加第一個雇員 
  134.         if (head == null) { 
  135.             head = emp; 
  136.         } else { 
  137.             Emp curr = head; 
  138.             while (true) { 
  139.                 if (curr.next == null) { 
  140.                     break; 
  141.                 } 
  142.                 curr = curr.next
  143.             } 
  144.             curr.next = emp; 
  145.         } 
  146.     } 
  147.  
  148.     //遍歷 
  149.     public void list(int no) { 
  150.         if (head == null) { 
  151.             System.out.println("第" + (no + 1) + "鏈表為空"); 
  152.             return
  153.         } 
  154.         System.out.print("第" + (no + 1) + "鏈表信息為:"); 
  155.         Emp curr = head; 
  156.         while (true) { 
  157.             if (curr != null) { 
  158.                 System.out.printf("=> id=%d,name=%s\t", curr.id, curr.name); 
  159.                 curr = curr.next
  160.             } else { 
  161.                 break; 
  162.             } 
  163.         } 
  164.         System.out.println(); 
  165.     } 
  166.  
  167.     //根據id查找雇員 
  168.     public Emp findEmpById(int id) { 
  169.         if (head == null) { 
  170.             System.out.println("鏈表為空"); 
  171.             return null
  172.         } 
  173.         Emp temp = head; 
  174.         while (temp != null) { 
  175.             if (temp.id == id) { 
  176.                 return temp
  177.             } 
  178.             temp = temp.next
  179.         } 
  180.         return null
  181.     } 
  182.  
  183.     //根據id刪除雇員 
  184.     public void deleteEmp(int id) { 
  185.         if (head == null) { 
  186.             System.out.println("沒有id=" + id + "的雇員"); 
  187.             return
  188.         } 
  189.         Emp curr = head; 
  190.         boolean flag = false
  191.         while (true) { 
  192.             if (curr == null) { 
  193.                 break; 
  194.             } 
  195.             if (curr.next.id == id) { 
  196.                 flag = true
  197.                 break; 
  198.             } 
  199.             curr = curr.next
  200.         } 
  201.         if (flag) { 
  202.             curr.next = curr.next.next
  203.         } else { 
  204.             System.out.println("沒有id=" + id + "的雇員"); 
  205.         } 
  206.     } 
  207.  

 【編輯推薦】

 

責任編輯:姜華 來源: 今日頭條
相關推薦

2021-05-12 09:07:09

Java數據結構算法

2021-03-09 06:30:32

JAVA數據結構算法

2021-03-18 08:44:20

Java數據結構算法

2021-04-13 09:37:41

Java數據結構算法

2021-03-12 09:13:47

Java數據結構算法

2021-03-23 08:33:22

Java數據結構算法

2021-03-26 08:40:28

Java數據結構算法

2021-03-08 06:28:57

JAVA數據結構與算法稀疏數組

2021-03-10 08:42:19

Java數據結構算法

2021-04-15 09:36:44

Java數據結構算法

2021-04-07 09:26:37

Java數據結構算法

2021-04-16 09:40:52

Java數據結構算法

2021-03-14 08:27:40

Java數據結構算法

2021-04-22 10:07:45

Java數據結構算法

2021-05-13 07:34:56

Java數據結構算法

2021-04-23 09:12:09

Java數據結構算法

2021-03-11 08:53:20

Java數據結構算法

2021-03-24 10:41:04

Java數據結構算法

2021-05-08 08:28:38

Java數據結構算法

2021-04-01 10:34:18

Java編程數據結構算法
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品成人 | 亚洲欧美综合 | 国产精品一区一区 | 性色av一区二区三区 | 日韩视频在线观看一区二区 | 成人a免费 | 久久综合影院 | 国产一区不卡在线观看 | 亚洲精品99999 | 99精品视频一区二区三区 | 日韩在线视频播放 | 国产精品日本一区二区在线播放 | 国产一区二区 | 国产高清精品网站 | 国产精品1区2区3区 男女啪啪高潮无遮挡免费动态 | 国产精品一区网站 | 日本不卡免费新一二三区 | 在线观看成人小视频 | 亚洲欧美在线一区 | 在线看91| 欧美一二三区 | 日韩一区二区三区在线 | 岛国av在线免费观看 | 中文字幕不卡 | 久久久国产精品 | 日韩视频在线播放 | 国产一级一级毛片 | 中文字幕在线人 | www.嫩草| 自拍偷拍亚洲视频 | 国产精品观看 | 九九亚洲 | 日韩精品一区在线 | www.xxxx欧美 | 成人精品免费视频 | avtt国产| 日韩一区二区av | 国产成人叼嘿视频在线观看 | 亚洲三级视频 | 在线日韩欧美 | 日韩中文字幕一区二区 |