java 哈希表的内存图_06_哈希表

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 + '\'' +

'}';

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值