1 哈希表也叫做散列表,是通过关键码值来访问的数据结构。
2两者 之间的关系也可以称为散列函数。
3 存放数据的数组也叫做散列表。
1 辅助节点 temp=head;
2 哈希表是多个单链表的集合,通过访问id来寻找数据。
3 先将链表放在数组中,然后通过数组来调用相关的方法。
4 对象数组的初始化:首先声明数组,然后在构造中定义长度和创建各个元素的对象,否则数组为空,容易报错。
import java.util.*;
public class Test {
public static void main(String[] args){
//创建一个哈希表对象。
HashTable ht =new HashTable(7);
//创建一个简单的菜单。
String key="";
Scanner scan =new Scanner(System.in);
while(true){
System.out.println("add:添加一个人");
System.out.println("list:显示所有的人");
System.out.println("exit:退出系统");
key =scan.next();
switch (key){
case ("add"):
System.out.println("请输入id");
int id = scan.nextInt();
System.out.println("请输入name");
String name = scan.next();
Person p1 = new Person(id,name);
ht.add(p1);
System.out.println("添加成功");
break;
case ("list"):
ht.list();
break;
case ("exit"):
System.out.println("退出菜单成功");
System.exit(0);
default:
System.out.println("输入错误,请再输入一遍");
}
}
}
}
//创建一个哈希表类,管理多条链表。
class HashTable {
public LinkList a[];
int size;
public HashTable(int size) {
this.size = size;
a = new LinkList[size];
for(int i=0;i<size;i++){
a[i] = new LinkList();
}
}
public void add(Person p){
//根据Person的id来添加到哪条链表。
int linklist_id =hashFun(p.id);
a[linklist_id].add(p);
}
//遍历所有的链表,和遍历出链表中所有的元素。
public void list(){
for(int i=0;i<a.length;i++){
a[i].list();
}
}
//定义一个哈希函数方法。
public int hashFun(int id){
return id%size;
}
}
//创建一个链表类。
class LinkList{
//创建一个头结点。
Person head =new Person(0,"");
//定义一个加入元素的方法。
public void add(Person p){
if(head.next==null){
head .next= p;
}
else{
Person temp = head;
while(true){
if(temp.next==null){
break;
}
temp=temp.next;
}
temp.next = p;
}
}
//定义一个遍历的方法。
public void list(){
Person temp =head;
if(head.next==null){
System.out.println("当前链表为空");
}
else{
System.out.println("当前链表信息为:");
while(true){
if(temp.next==null){
break;
}
else {
System.out.println("id="+temp.next.id + " " + "name="+temp.next.name);
temp = temp.next;
}
}
}
}
}
class Person {
int id;
String name;
Person next;
public Person(int id,String name){
this.id = id;
this.name = name;
}
}
尚硅谷Java数据结构与java算法(Java数据结构与算法)
尚硅谷Java数据结构与java算法(Java数据结构与算法)