什么是哈希表
发表于:2025-11-16 作者:千家信息网编辑
千家信息网最后更新 2025年11月16日,这篇文章主要介绍"什么是哈希表",在日常操作中,相信很多人在什么是哈希表问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"什么是哈希表"的疑惑有所帮助!接下来,请跟着小编一
千家信息网最后更新 2025年11月16日什么是哈希表
这篇文章主要介绍"什么是哈希表",在日常操作中,相信很多人在什么是哈希表问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"什么是哈希表"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
基本介绍
散列表(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 + "的雇员"); } } }到此,关于"什么是哈希表"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
雇员
哈希
员工
输入
学习
信息
关键
函数
数据
更多
帮助
实用
接下来
也就是
也就是说
位置
元素
公司
内存
地址
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
串口服务器安全防护设置
web服务器一般用什么写
网络技术工人有什么发展
最新MTProto服务器
办公系统软件开发价钱
网络安全检察自查报告
模拟软件开发团队
设计软件开发合同
郑州应用软件开发怎样收费
为什么选托管服务器
小型服务器安装什么安全软件
公司网络安全的治理机构是谁
比较大的网络安全事件
广播电视网络安全总结
电气自动化和计算机网络技术
电脑如何快速打开服务器
学网络安全用苹果笔记本可以吗
部署之后不显示数据库数据库
小牛哥整家互联网科技规模
远程mysql数据库修改
电脑怎样连接到服务器
软件开发服务分摊确认收入
我想做数据库
山东广赢网络技术有限公司
平谷区网络安全等级保护
hp服务器从光驱启动
数据库的数据分哪三种模型
计算机网络安全唐山就业
北京华盛辉软件开发公司好吗
重庆璧山区安卓软件开发公司