1.哈希表的优势
使用数组和链表实现,数组的每个元素是一个单链表
2.代码实现
1.数组节点
package hashTable;
import java.util.HashSet;
public class EmployeeArray {
private EmployeeLinked[] employeeLinked;
private int size;
public EmployeeArray(int size) {
this.size = size;
this.employeeLinked = new EmployeeLinked[size];
for (int i = 0; i < size; i++) {
employeeLinked[i] = new EmployeeLinked();
}
}
public void add(Employees employees) {
int address = HashFun(employees.id);
employeeLinked[address].AddEmployees(employees);
}
public int HashFun(int id) {
return id % size;
}
public void ShowHashTable() {
for (int i = 0; i < size; i++) {
employeeLinked[i].show(i);
}
}
public void FindNode(int id) {
int address = HashFun(id);
Employees employees = employeeLinked[address].findNode(id);
if (employees != null) {
System.out.printf("id为%d的节点在第%d条链表上", id, address);
}
}
}
2.链表节点
public class EmployeeLinked {
private Employees head;
public void AddEmployees(Employees newEmployee) {
if (head == null) {
head = newEmployee;
return;
} else {
Employees temp = head;
while (true) {
if (temp.next == null) {
break;
}
temp = temp.next;
}
temp = newEmployee;
}
}
public void show(int o) {
if (head == null) {
System.out.println("第" + (o += 1) + "条链表为空");
return;
}
System.out.print("第" + (o += 1) + "条链表信息为:");
Employees temp = head;
while (true) {
System.out.printf("=>%d,%s\t", temp.id, temp.name);
if (temp.next == null) {
break;
}
temp = temp.next;
}
System.out.println();
}
public Employees findNode(int id) {
if (head == null) {
System.out.println("链表为空");
return null;
}
Employees temp = head;
while (true) {
if (temp.id == id) {
break;
}
if (temp.next == null) {
temp = null;
}
temp = temp.next;
}
return temp;
}
}
3.入口
package hashTable;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
EmployeeArray hashTable = new EmployeeArray(9);
String str = "";
while (true) {
System.out.println("请您输入功能序号:");
System.out.println("add--------------->添加节点");
System.out.println("show-------------->显示节点");
System.out.println("find-------------->查找节点");
System.out.println("exit-------------->退出系统");
str = scanner.nextLine();
switch (str) {
case "add":
System.out.println("请输入Id:");
int id = scanner.nextInt();
System.out.println("请输入姓名:");
String name = scanner.next();
Employees employees = new Employees(id, name);
hashTable.add(employees);
break;
case "show":
hashTable.ShowHashTable();
break;
case "find":
System.out.println("请输入要查找的节点的id:");
int idFind = scanner.nextInt();
hashTable.FindNode(idFind);
case "exit":
scanner.close();
System.exit(0);
default:
break;
}
}
}
}