import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
HashTab hashTab = new HashTab(7);
Scanner scanner = new Scanner(System.in);
String key="";
while (true){
System.out.println("add 添加");
System.out.println("list 遍历");
System.out.println("find 查找");
System.out.println("exit 退出");
key = scanner.next();
switch (key){
case "add":
System.out.println("请输入ID");
int id = scanner.nextInt();
System.out.println("请输入姓名");
String name = scanner.next();
Student student = new Student(id, name);
hashTab.add(student);
break;
case "list":
hashTab.list();
break;
case "find":
System.out.println("请输入要查找的id");
id=scanner.nextInt();
hashTab.findById(id);
break;
case "exit":
scanner.close();
System.exit(0);
default:
break;
}
}
}
}
//创建hash表
class HashTab{
private LinkArray[] linkArrays;
private int size;
public HashTab(int size) {
this.size=size;
linkArrays=new LinkArray[size];
for (int i = 0; i < size; i++) {
linkArrays[i]=new LinkArray();
}
}
public void add(Student student){
//拿到放在那条链表的id
int linkArrayId = hashFun(student.getId());
linkArrays[linkArrayId].add(student);
}
public void list(){
for (int i = 0; i < size; i++) {
linkArrays[i].list();
}
}
public void findById(int id){
//看在那条链表
int linkArrayId = hashFun(id);
Student studnet = linkArrays[linkArrayId].findStudnetById(id);
if(studnet!=null){
System.out.println("在"+(linkArrayId+1)+"条链表找到");
}else {
System.out.println("找不到呀");
}
}
//编写散列函数
public int hashFun(int id){
return id%size;
}
}
//创建链表
class LinkArray{
private Student head;
//添加方法
public void add(Student student){
if(head==null){
//如果是第一个直接赋值
head=student;
return;
}
//创建辅助节点
Student temp=head;
while (true){
if(temp.next==null){
break;
}
temp=temp.next;
}
temp.next=student;
}
public void list(){
//如果head为空直接返回
if(head==null){
System.out.println("链表为空");
return;
}
//创建辅助指针
Student temp=head;
while (true){
System.out.print("学生标号为"+temp.getId()+"姓名为"+temp.getName()+"下一位:");
if(temp.next==null){
//说明已经到最后了
break;
}
//往后移动
temp=temp.next;
}
System.out.println();
}
public Student findStudnetById(int id){
if(head==null){
return head;
}
//创建辅助指针
Student temp=head;
while (true){
if(temp.getId()==id){
break;
}
if(temp.next==null){
break;
}
//一直往下找
temp=temp.next;
}
return temp;
}
}
//
class Student{
private int id;
private String name;
public Student next;
public Student(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", next=" + next +
'}';
}
}