哈希表内部维护了一个链表数组 每一个数组的元素都是一个链表
package Hash;
import java.util.Random;
class GameNode{
public String name;
GameNode next;
GameNode(String name){
this.name = name;
}
@Override
public String toString() {
return "GameNode{" +
"name='" + name + '\'' +
'}';
}
}
class LinkEdList{
public GameNode root = new GameNode("root");
public void add(GameNode Game){
GameNode temp = root;
while (temp.next!=null){
temp = temp.next;
}
//找到最后
temp.next = Game;
}
public void list(){
GameNode temp = root.next;
while (temp!=null){
System.out.println(temp);
temp = temp.next;
}
}
public void Find(GameNode Game){
GameNode temp = root.next;
while (temp!=null){
if(Game.name.equals(Game.name)){
System.out.println("当前链表存在:" + Game.name);
break;
}
temp = temp.next;
}
}
public void del(GameNode Game){
GameNode temp1 = root.next;
GameNode temp2 = root;
while (temp1!=null){
if(Game.name.equals(temp1.name)){
temp2.next = temp1.next; //删除节点的下一个告诉他的上一个节点地址
System.out.println("删除成功");
break;
}else{
temp1 = temp1.next;
temp2 = temp2.next;
}
}
}
public void update(GameNode Game,GameNode Game1){
GameNode temp = root.next;
while (temp!=null){
if(temp.name.equals(Game.name)){
temp.name = Game1.name;
break;
}
temp = temp.next;
}
}
}
class HashTable{
public LinkEdList[] ArrayList;
public int size;//数组链表个数
public static int Number = 0;
HashTable(int size){
this.size = size;
ArrayList = new LinkEdList[this.size];
//数组每一个都是链表 都 开辟空间 不然 后面 用到空指针异常
for (int i =0;i<this.size;i++){
ArrayList[i] = new LinkEdList();
}
}
public void add(GameNode node){
ArrayList[rand()].add(node);//数组中的元素是链表调用add方法添加元素
}
public int rand(){
return new Random().nextInt(this.size);
}
public void list(){
for (int i =0;i<this.size;i++){
ArrayList[i].list();
}
}
public void Find(GameNode Game){
for (int i =0;i<this.size;i++){
ArrayList[i].Find(Game);
}
}
public void del(GameNode Game){
for (int i =0;i<this.size;i++){
ArrayList[i].del(Game);
}
}
public void update(GameNode Game,GameNode Game1){
for (int i =0;i<this.size;i++){
ArrayList[i].update(Game,Game1);
}
}
}
public class hash {
public static void main(String[] args) {
GameNode node1 = new GameNode("游戏王");
GameNode node2 = new GameNode("飞天忍者猫");
GameNode node3 = new GameNode("影子传说");
GameNode node4 = new GameNode("快打旋风");
HashTable hash = new HashTable(5);
hash.add(node1);
hash.add(node2);
hash.add(node3);
hash.add(node4);
hash.list();
}
}
运行结果