//创建hash表
class HashTable{
private EmpLinkList[] empLinkListArray;
private static int size;
public HashTable(int size) {
this.size = size;
empLinkListArray = new EmpLinkList[size];
//对象数组需要对每个对象依次初始化
for(int i = 0;i<size;i++){
empLinkListArray[i] = new EmpLinkList();
}
}
//添加
public void add(Emp emp){
//根据员工的id得到该员工应该加入的链表
int empLinkListNum = Fun(emp.id);
empLinkListArray[empLinkListNum].add(emp);
}
//遍历
public void list(){
for(int i = 0;i<size;i++){
empLinkListArray[i].list(i);
}
}
//构建一个散列函数 一个简单的取模法
public static int Fun(int id){
return id % size;
}
//查找
public void findEmp(int id){
int empLinkListNum = Fun(id);
Emp emp = empLinkListArray[empLinkListNum].findEmp(id);
if(emp != null){//找到
System.out.println("在第"+empLinkListNum+"条连链表上找到了该雇员");
}else{
System.out.println("在hash表中没有找到该雇员");
}
}
public void delete(int id){
int empLinkListNum = Fun(id);
empLinkListArray[empLinkListNum].delete(id);
}
}
//雇员对象
class Emp{
public int id;
public String name;
public Emp next;
public Emp(int id, String name) {
this.id = id;
this.name = name;
}
}
//链表
class EmpLinkList{
//头指针,直接指向第一个雇员
private Emp head;
//添加雇员到链表
//假定都是添加到最后一位
public void add(Emp emp){
//如果是第一个
if(head == null){
head = emp;
return;
}
//构造一个辅助指针
Emp curEmp = head;
while(true){
if(curEmp.next == null){
break;
}else {
curEmp = curEmp.next;
}
}
curEmp.next = emp;
}
//遍历链表的雇员信息
public void list(int i){
if(head == null){
System.out.println(i+"号链表为空");
return;
}
System.out.print(i+"号链表的信息为:");
Emp curEmp = head;
while(true){
System.out.println("id="+curEmp.id+"name="+curEmp.name);
if(curEmp.next!=null){
curEmp = curEmp.next;
}else {
break;
}
}
}
//查找
public Emp findEmp(int id){
//判断链表是否为空
if(head == null){
return null;
}
Emp curEmp = head;
while (true){
if(curEmp.id == id){
return curEmp;
}
if(curEmp.next == null){
//说明当前链表找不到
return null;
}
curEmp = curEmp.next;
}
}
//删除
public void delete(int id){
if(head == null){
System.out.println("当前链表为空");
return;
}
Emp curEmp = head;
while (true){
if(curEmp.id == id){
head = curEmp.next;
System.out.println("删除成功");
break;
}
if(curEmp.next == null){
System.out.println("当前链表没有你想要删除的元素");
break;
}
else if(curEmp.next.id == id){
curEmp.next = curEmp.next.next;
System.out.println("删除成功");
break;
}
curEmp = curEmp.next;
}
}
}
构建hashtable表
最新推荐文章于 2021-07-10 08:47:45 发布