06_哈希表
1.哈希表的概念
2.散列函数的概念
3.哈希表的内存图
4.哈希表的Java实现(数组+链表)
package DataStructureReview; import java.util.ArrayList; import java.util.LinkedList; public class HashTableDemo { public static void main(String[] args) { //创建hashtable HashTable hashTable = new HashTable(); //添加数据 hashTable.add(new Emp(1, "x")); hashTable.add(new Emp(2, "y")); hashTable.add(new Emp(3, "z")); hashTable.add(new Emp(4, "a")); //遍历 System.out.println(hashTable.toString()); //根据id查询元素 System.out.println(hashTable.findEmpById(2)); //根据id删除元素 System.out.println(hashTable.delete(2)); System.out.println(hashTable); } } class HashTable { private ArrayList<LinkedList> linkedlistarr = new ArrayList(); //设置哈希表链表条数 private int size = 10; //为链表数组初始化 public HashTable() { for (int i = 0; i < size; i++) { linkedlistarr.add(i, new LinkedList<Emp>()); } } //添加数据 public void add(Emp emp) { //根据散列函数确定数据存放在第几条链表上 linkedlistarr.get(hashFun(emp.id)).add(emp); } //删除数据,根据员工id删除 public boolean delete(int id) { //获取数据存放的链表 LinkedList linkedList = linkedlistarr.get(hashFun(id)); //判断编号为id的员工是否存在 boolean flag = false; Emp emp = null; for (Object obj : linkedList) { emp = (Emp) obj; if (emp.id == id) { flag = true; break; } } //删除元素 if (flag == true) { linkedList.remove(emp); } return flag; } //根据id查询数据记录 public Emp findEmpById(int id) { //获取数据存放的链表 LinkedList linkedList = linkedlistarr.get(hashFun(id)); //判断编号为id的员工是否存在 boolean flag = false; Emp emp = null; for (Object obj : linkedList) { emp = (Emp) obj; if (emp.id == id) { flag = true; break; } } return flag ? emp : null; } //遍历hashtable @Override public String toString() { for (int i = 0; i < size; i++) { if (linkedlistarr.get(i).isEmpty() != true) { for (Object obj : linkedlistarr.get(i)) { System.out.println((Emp) obj); } } } return ""; } //散列函数(哈希函数),给定key value 返回存储在那条链表上 public int hashFun(int id) { //除留余数法 return id % size; } } class Emp { public int id; private String name; public Emp(int id, String name) { this.id = id; this.name = name; } @Override public String toString() { return "Emp{" + "id=" + id + ", name='" + name + '\'' + '}'; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界