1.Dome01----------------------------------------------------------------------------------------------------
`package hashTable;
import java.util.Scanner;
public class Dome01 {
public static void main(String[] args) {
HashTable hashTable = new HashTable(10);
while (true) {
System.out.println("-------请选择下列操作命令进行操作:--------");
System.out.println("添加学生输入:add");
System.out.println("遍历所有学生输入:list");
System.out.println("删除学生输入:del");
System.out.println("查找学生输入:find");
Scanner scanner = new Scanner(System.in);
String string = scanner.next();
switch (string) {
case "add":
System.out.println("请输入学生id:");
;
int id = scanner.nextInt();
System.out.println("请输入学生姓名:");
String name = scanner.next();
Student student = new Student(id, name);
hashTable.addStudent(student);
break;
case "list":
hashTable.listStudent();
break;
case "del":
System.out.println("请输入要删除的学生id:");
id = scanner.nextInt();
hashTable.delStudent(id);
break;
case "find":
System.out.println("请输入要查找的学生id:");
id = scanner.nextInt();
hashTable.findStudent(id);
break;
default:
scanner.close();
System.exit(0);
break;
}
}
}
}`
2.HashTable-----------------------------------------------------------------------------------------------
`package hashTable;
public class HashTable {
LinkTable[] hashTable;
int size;
public HashTable(int size) {
this.size = size;
hashTable=new LinkTable[size];
for (int i=0;i<size;i++){
hashTable[i]=new LinkTable();
}
}
public void addStudent(Student student){
int i=student.id%size;
hashTable[i].addStudent(student);
}
public void listStudent(){
for(int i=0;i<size;i++){
hashTable[i].listStudent(i);
}
}
public void findStudent(int id){
int i=id%size;
hashTable[i].findStudent(id);
}
public void delStudent(int id){
int i=id%size;
hashTable[i].delStudent(id);
}
}
`
3.LinkTable-----------------------------------------------------------------------------------------------
package hashTable;
public class LinkTable {
Student head;
public void addStudent(Student student) {
if (head == null) {//添加第一个学生
head = student;
return;
}
Student s = head;//媒介
while (true) {//添加非第一个学生
if (s.next == null) {//说明到了最后一个位置了,我们在最后一个位置插入。
s.next = student;//添加学生到链表。
break;
}
s = s.next;//没到最后位置就后移
}
}
public void listStudent(int i) {//遍历链表学生
if (head == null) {//链表为空
System.out.printf("第%d个链表为空:",i+1);
System.out.println("");//每条链表打印的时候就换行隔开
return;
}
System.out.printf("第%d个链表学生依次为:",i+1);
Student s = head;
while (true) {
System.out.printf("==>> id=%d name=%s",s.id,s.name);
if(s.next==null){//到了最后一个学生
break;
}else{
s=s.next;//后移
}
}
System.out.println("");//每条链表打印的时候就换行隔开
}
public void findStudent(int id) {//遍历链表学生
if (head == null) {//链表为空
System.out.printf("id=%d的学生所在的链表为空,所以该学生不存在\n",id);
return;
}
Student s = head;
while (true) {
if(s.id==id) {
System.out.printf("已找到该学生的信息: id=%d name=%s\n", s.id, s.name);
break;
}
if(s.next==null){//到了最后一个学生
System.out.printf("id=%d的学生不存在\n",id);
break;
}else{
s=s.next;//后移
}
}
}
public void delStudent(int id) {//删除id对应的学生
if (head == null) {//链表为空
System.out.printf("id=%d的学生所在的链表为空,所以该学生不存在,删除失败\n",id);
return;
}
Student s = head;//辅助指针
Student front=head;//当前学生的前一个学生
//能到这里至少说明该链表有一个学生。
//------------第一个元素有点特殊,和后面的元素分开写--------------
if(s.id==id){//表明第一个就是要删除的对象
if(s.next==null){//第一个也是最后一个元素
head=null;//现在该链表任何学生都没有了
//这里可以写点东西把垃圾清除了
}else{//第一个元素后面还有很多元素,由于把第一个元素删了,于是把head指向第二个元素
head=head.next;
}
System.out.println("删除成功\n");
return;
}else{//表明第一个不是就是要删除的对象
s= s.next;
}
//--------------中间元素---------------
while (true) {
if(s.id==id){
front.next=s.next;//删除
System.out.println("删除成功\n");
return;
}
if(s.next==null){
System.out.println("很遗憾遍历了整个链表都未能找到对应的学生,学生不存在!\n");
return;
}
s=s.next;
front=front.next;
}
}
}
4.Student-----------------------------------------------------------------------------------------------
package hashTable;
public class Student {
int id;
String name;
Student next;
public Student(int id, String name) {
this.id = id;
this.name = name;
}
}
标签:head,代码,System,next,链表,哈希,id,out From: https://www.cnblogs.com/pengti/p/16739279.html