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

-
代码实现:
import java.util.Scanner; // 测试哈希表 public class HashTableDemo { public static void main(String[] args) { HashTable hashTable = new HashTable(10); Scanner scanner = new Scanner(System.in); while (true) { System.out.println("add: " + "添加雇员"); System.out.println("del: " + "删除雇员"); System.out.println("list: " + "显示雇员"); System.out.println("exit: " + "退出"); String option = scanner.next(); switch (option) { case "add": System.out.println("id:"); int addId = scanner.nextInt(); System.out.println("name:"); String name = scanner.next(); hashTable.add(new Emp(addId, name)); break; case "list": hashTable.list(); break; case "del": System.out.println("id:"); int delId = scanner.nextInt(); hashTable.del(delId); break; case "exit": System.exit(0); } } } } // 哈希表定义 class HashTable{ // 哈希表的链表数组 public EmpLinkedList[] empLinkedLists; // 链表个数 public int size; // 初始化哈希表 public HashTable(int size) { this.size = size; this.empLinkedLists = new EmpLinkedList[size]; for (int i = 0; i < size; i++) { empLinkedLists[i] = new EmpLinkedList(); } } // 哈希函数定义 private int hashFunc(int id) { return id % size; } // 向哈希表中添加职员 public void add(Emp emp) { int index = hashFunc(emp.id); empLinkedLists[index].add(emp); } // 从哈希表中删除职员 public void del(int id) { int index = hashFunc(id); empLinkedLists[index].del(id); } // 列出表中所有职员 public void list() { for (int i = 0; i < size; i++) { empLinkedLists[i].list(); } } } // 职员链表 class EmpLinkedList{ // 头指针 public Emp head; // 向链表中添加职员 public void add(Emp emp) { if (head == null) { head = emp; } else { Emp temp = head; while (temp.next != null) { temp = temp.next; } temp.next = emp; } } // 从链表中删除职员 public void del(int id) { if (head == null) { System.out.println("链表为空,删除失败"); return; } else if (head.id == id) { head = head.next; System.out.println("删除成功"); return; } else { Emp temp = head; boolean flag = false; while (temp.next != null) { if (temp.next.id == id) { flag = true; temp.next = temp.next.next; System.out.println("删除成功"); break; } temp = temp.next; } if (!flag) { System.out.println("删除失败"); } } } // 列出所有职员 public void list() { if (head == null) { System.out.println("此链表为空"); } else { Emp temp = head; while (temp != null) { System.out.print(temp + " "); temp = temp.next; } System.out.println(); } } } // 定义职员节点 class Emp{ // 职员id public int id; // 职员姓名 public String name; // 指向下一个节点的指针 public Emp next; public Emp(int id, String name) { this.id = id; this.name = name; this.next = null; } @Override public String toString() { return "Emp{" + "id=" + id + ", name='" + name + '\'' + '}'; } }