一、文件目录
二、代码
/** * 定义一个雇员 */ public class Emp { public int id; public String name; //默认为null 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 + '\'' + '}'; } }
/** * 表示链表 */ public class EmpLinkedList { // 头指针,指向第一个Emp,默认为null private Emp head; /** * 添加雇员 * * @param emp */ public void add(Emp emp) { //添加第一个元素 if (head == null) { head = emp; return; } Emp cur = head; while (cur.next != null) { cur = cur.next; } cur.next = emp; } /** * 输出链表内容 */ public void list(int no) { if (head == null) { System.out.println("当前" + no + "链表为空"); return; } System.out.println("当前" + no + "链表的信息为:"); //辅助指针 Emp cur = head; while (true) { System.out.printf("=》id=%d name=%s\t", cur.id, cur.name); if (cur.next == null) { break; } cur = cur.next; } System.out.println(); } /** * 根据id查找雇员 * @param id * @return */ public Emp findEmpById(int id) { if (head == null) { System.out.println("链表为空"); return null; } Emp cur = head; while (cur != null) { if (cur.id == id) { return cur; } cur = cur.next; } return null; } public void del(int id) { if (head == null) { System.out.println("链表为空"); return; } Emp cur = head; //删除的位于第一个 if(head.id==id){ head=head.next; return ; } while (cur.next != null) { if (cur.next.id == id) { cur.next=cur.next.next; return; } cur = cur.next; } } }
public class HashTab { private EmpLinkedList[] empLinkedList; private int size; public HashTab(int size) { //初始化 this.size = size; empLinkedList = new EmpLinkedList[size]; for (int i = 0; i < empLinkedList.length; i++) { empLinkedList[i] = new EmpLinkedList(); } } /** * 添加雇员 * * @param emp */ public void add(Emp emp) { empLinkedList[hashFun(emp.id)].add(emp); } /** * 遍历所有链表 */ public void list() { for (int i = 0; i < size; i++) { empLinkedList[i].list(i); } } /** * 根据ID查找 * @param id * @return */ public Emp findEmpById(int id) { return empLinkedList[hashFun(id)].findEmpById(id); } /** * 根据ID删除 * @param id */ public void del(int id) { empLinkedList[hashFun(id)].del(id); } /** * 散列函数,取模法 * * @param id * @return */ public int hashFun(int id) { return id % size; } }
import java.util.Scanner; public class HashTabDemo { public static void main(String[] args) { // 创建哈希表 HashTab hashTab = new HashTab(7); // 编写一个简单的菜单 String key = ""; Scanner scanner = new Scanner(System.in); boolean loop = true; while (loop) { System.out.println("add:添加雇员"); System.out.println("list:显示雇员"); System.out.println("find:查找雇员"); System.out.println("del:删除"); System.out.println("exit:退出系统"); key = scanner.next(); int id; switch (key) { case "add": System.out.println("输入id"); id = scanner.nextInt(); System.out.println("输入姓名"); String name = scanner.next(); hashTab.add(new Emp(id, name)); break; case "find": System.out.println("输入id"); id = scanner.nextInt(); Emp empById = hashTab.findEmpById(id); System.out.println(empById); break; case "del": System.out.println("输入id"); id = scanner.nextInt(); hashTab.del(id); break; case "list": hashTab.list(); break; case "exit": loop = false; scanner.close(); break; } } } }
三、测试
D:\ProgramFiles\Java\jdk1.8.0_241\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\lib\idea_rt.jar=55054:C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\bin" -Dfile.encoding=UTF-8 -classpath D:\ProgramFiles\Java\jdk1.8.0_241\jre\lib\charsets.jar;D:\ProgramFiles\Java\jdk1.8.0_241\jre\lib\deploy.jar;D:\ProgramFiles\Java\jdk1.8.0_241\jre\lib\ext\access-bridge-64.jar;D:\ProgramFiles\Java\jdk1.8.0_241\jre\lib\ext\cldrdata.jar;D:\ProgramFiles\Java\jdk1.8.0_241\jre\lib\ext\dnsns.jar;D:\ProgramFiles\Java\jdk1.8.0_241\jre\lib\ext\jaccess.jar;D:\ProgramFiles\Java\jdk1.8.0_241\jre\lib\ext\jfxrt.jar;D:\ProgramFiles\Java\jdk1.8.0_241\jre\lib\ext\localedata.jar;D:\ProgramFiles\Java\jdk1.8.0_241\jre\lib\ext\nashorn.jar;D:\ProgramFiles\Java\jdk1.8.0_241\jre\lib\ext\sunec.jar;D:\ProgramFiles\Java\jdk1.8.0_241\jre\lib\ext\sunjce_provider.jar;D:\ProgramFiles\Java\jdk1.8.0_241\jre\lib\ext\sunmscapi.jar;D:\ProgramFiles\Java\jdk1.8.0_241\jre\lib\ext\sunpkcs11.jar;D:\ProgramFiles\Java\jdk1.8.0_241\jre\lib\ext\zipfs.jar;D:\ProgramFiles\Java\jdk1.8.0_241\jre\lib\javaws.jar;D:\ProgramFiles\Java\jdk1.8.0_241\jre\lib\jce.jar;D:\ProgramFiles\Java\jdk1.8.0_241\jre\lib\jfr.jar;D:\ProgramFiles\Java\jdk1.8.0_241\jre\lib\jfxswt.jar;D:\ProgramFiles\Java\jdk1.8.0_241\jre\lib\jsse.jar;D:\ProgramFiles\Java\jdk1.8.0_241\jre\lib\management-agent.jar;D:\ProgramFiles\Java\jdk1.8.0_241\jre\lib\plugin.jar;D:\ProgramFiles\Java\jdk1.8.0_241\jre\lib\resources.jar;D:\ProgramFiles\Java\jdk1.8.0_241\jre\lib\rt.jar;F:\myCode\java\video\DataStructures\DataStructures\target\classes org.minos.hashtab.HashTabDemo add:添加雇员 list:显示雇员 find:查找雇员 del:删除 exit:退出系统 add 输入id 1 输入姓名 1 add:添加雇员 list:显示雇员 find:查找雇员 del:删除 exit:退出系统 add 输入id 2 输入姓名 2 add:添加雇员 list:显示雇员 find:查找雇员 del:删除 exit:退出系统 add 输入id 8 输入姓名 8 add:添加雇员 list:显示雇员 find:查找雇员 del:删除 exit:退出系统 add 输入id 15 输入姓名 15 add:添加雇员 list:显示雇员 find:查找雇员 del:删除 exit:退出系统 add 输入id 22 输入姓名 22 add:添加雇员 list:显示雇员 find:查找雇员 del:删除 exit:退出系统 list 当前0链表为空 当前1链表的信息为: =》id=1 name=1 =》id=8 name=8 =》id=15 name=15 =》id=22 name=22 当前2链表的信息为: =》id=2 name=2 当前3链表为空 当前4链表为空 当前5链表为空 当前6链表为空 add:添加雇员 list:显示雇员 find:查找雇员 del:删除 exit:退出系统 del 输入id 22 add:添加雇员 list:显示雇员 find:查找雇员 del:删除 exit:退出系统 list 当前0链表为空 当前1链表的信息为: =》id=1 name=1 =》id=8 name=8 =》id=15 name=15 当前2链表的信息为: =》id=2 name=2 当前3链表为空 当前4链表为空 当前5链表为空 当前6链表为空 add:添加雇员 list:显示雇员 find:查找雇员 del:删除 exit:退出系统 del 输入id 8 add:添加雇员 list:显示雇员 find:查找雇员 del:删除 exit:退出系统 list 当前0链表为空 当前1链表的信息为: =》id=1 name=1 =》id=15 name=15 当前2链表的信息为: =》id=2 name=2 当前3链表为空 当前4链表为空 当前5链表为空 当前6链表为空 add:添加雇员 list:显示雇员 find:查找雇员 del:删除 exit:退出系统 del 输入id 1 add:添加雇员 list:显示雇员 find:查找雇员 del:删除 exit:退出系统 list 当前0链表为空 当前1链表的信息为: =》id=15 name=15 当前2链表的信息为: =》id=2 name=2 当前3链表为空 当前4链表为空 当前5链表为空 当前6链表为空 add:添加雇员 list:显示雇员 find:查找雇员 del:删除 exit:退出系统 find 输入id 2 Emp{id=2, name='2'} add:添加雇员 list:显示雇员 find:查找雇员 del:删除 exit:退出系统 list 当前0链表为空 当前1链表的信息为: =》id=15 name=15 当前2链表的信息为: =》id=2 name=2 当前3链表为空 当前4链表为空 当前5链表为空 当前6链表为空 add:添加雇员 list:显示雇员 find:查找雇员 del:删除 exit:退出系统