什么是哈希表

这篇文章主要介绍“什么是哈希表”,在日常操作中,相信很多人在什么是哈希表问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”什么是哈希表”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

创新互联主要从事成都网站制作、网站设计、网页设计、企业做网站、公司建网站等业务。立足成都服务什邡,10年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:13518219792

什么是哈希表

 基本介绍

散列表(Hash Table,也叫哈希表),是根据关键码值(Key  Value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中的一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表

什么是哈希表

Google上机题

有一个公司,当有新员工来报到时,要求将该员工的信息加入(id,性别,年龄,地址….),当输入该员工的id时,要求查找该员工的所有信息。

要求:不使用数据库,尽量节省内存,速度越快越好。

package com.xie.hashtable;  import java.util.Scanner;  public class HashTableDemo {     public static void main(String[] args) {         //创建一个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;             }         }     } }  //创建哈希表,管理多条链表 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) {         //根据员工的id,得到该员工应当添加到哪条链表         int empLinkedListNo = hashFun(emp.id);         //将emp添加到对应的链表         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);         }     }      //编写散列函数,使用简单的取模法     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();     }      //根据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;     }      //根据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 + "的雇员");         }     }  }

到此,关于“什么是哈希表”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!

本文题目:什么是哈希表
地址分享:/article46/iisjhg.html

成都网站建设公司_创新互联,为您提供软件开发自适应网站全网营销推广企业建站外贸建站网站制作

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

h5响应式网站建设