packageDataStructureReview;importjava.util.ArrayList;importjava.util.LinkedList;public classHashTableDemo {public static voidmain(String[] args) {//创建hashtable
HashTable hashTable = newHashTable();//添加数据
hashTable.add(new Emp(1, "x"));
hashTable.add(new Emp(2, "y"));
hashTable.add(new Emp(3, "z"));
hashTable.add(new Emp(4, "a"));//遍历
System.out.println(hashTable.toString());//根据id查询元素
System.out.println(hashTable.findEmpById(2));//根据id删除元素
System.out.println(hashTable.delete(2));
System.out.println(hashTable);
}
}classHashTable {private ArrayList linkedlistarr = newArrayList();//设置哈希表链表条数
private int size = 10;//为链表数组初始化
publicHashTable() {for (int i = 0; i < size; i++) {
linkedlistarr.add(i,new LinkedList());
}
}//添加数据
public voidadd(Emp emp) {//根据散列函数确定数据存放在第几条链表上
linkedlistarr.get(hashFun(emp.id)).add(emp);
}//删除数据,根据员工id删除
public boolean delete(intid) {//获取数据存放的链表
LinkedList linkedList =linkedlistarr.get(hashFun(id));//判断编号为id的员工是否存在
boolean flag = false;
Emp emp= null;for(Object obj : linkedList) {
emp=(Emp) obj;if (emp.id ==id) {
flag= true;break;
}
}//删除元素
if (flag == true) {
linkedList.remove(emp);
}returnflag;
}//根据id查询数据记录
public Emp findEmpById(intid) {//获取数据存放的链表
LinkedList linkedList =linkedlistarr.get(hashFun(id));//判断编号为id的员工是否存在
boolean flag = false;
Emp emp= null;for(Object obj : linkedList) {
emp=(Emp) obj;if (emp.id ==id) {
flag= true;break;
}
}return flag ? emp : null;
}//遍历hashtable
@OverridepublicString toString() {for (int i = 0; i < size; i++) {if (linkedlistarr.get(i).isEmpty() != true) {for(Object obj : linkedlistarr.get(i)) {
System.out.println((Emp) obj);
}
}
}return "";
}//散列函数(哈希函数),给定key value 返回存储在那条链表上
public int hashFun(intid) {//除留余数法
return id %size;
}
}classEmp {public intid;privateString name;public Emp(intid, String name) {this.id =id;this.name =name;
}
@OverridepublicString toString() {return "Emp{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}