1. 基本介绍
- 哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。
- 哈希表通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。
2. 使用代码实现主要功能
class Node {
private int id;
private Node next;
public Node(int id) {
this.id = id;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}
class NodeLinkedList {
private Node head;
public void add(Node node) {
if (head == null) {
head = node;
return;
}
Node curNode = head;
while (true) {
if (curNode.getNext() == null) {
break;
}
curNode = curNode.getNext();
}
curNode.setNext(node);
}
public void list(int no) {
if (head == null) {
System.out.println("第 " + (no + 1) + " 链表为空");
return;
}
System.out.print("第 " + (no + 1) + " 链表的信息为");
Node curNode = head;
while (true) {
System.out.printf(" => id=%d\t", curNode.getId());
if (curNode.getNext() == null) {
break;
}
curNode = curNode.getNext();
}
System.out.println();
}
public Node findNodeById(int id) {
if (head == null) {
System.out.println("链表为空");
return null;
}
Node curNode = head;
while (true) {
if (curNode.getId() == id) {
break;
}
if (curNode.getNext() == null) {
curNode = null;
break;
}
curNode = curNode.getNext();
}
return curNode;
}
}
class HashTab {
private NodeLinkedList[] nodeLinkedListArray;
private int size;
public HashTab(int size) {
this.size = size;
nodeLinkedListArray = new NodeLinkedList[size];
for (int i = 0; i < size; i++) {
nodeLinkedListArray[i] = new NodeLinkedList();
}
}
public void add(Node node) {
int nodeLinkedListNO = hashFun(node.getId());
nodeLinkedListArray[nodeLinkedListNO].add(node);
}
public void list() {
for (int i = 0; i < size; i++) {
nodeLinkedListArray[i].list(i);
}
}
public void findNodeById(int id) {
int nodeLinkedListNO = hashFun(id);
Node node = nodeLinkedListArray[nodeLinkedListNO].findNodeById(id);
if (node != null) {
System.out.printf("在第%d条链表中找到节点 id = %d\n", (nodeLinkedListNO + 1), id);
} else {
System.out.println("没有找到该雇员~");
}
}
private int hashFun(int id) {
return id % size;
}
}