哈希表(散列表)
例子:
基本介绍
思路:
public class HashTable {
public static void main(String[] args) {
HashTab hashTab = new HashTab(10);
hashTab.add(new Emp(1,"1"));
hashTab.add(new Emp(11,"11"));
hashTab.add(new Emp(13,"13"));
hashTab.add(new Emp(145,"145"));
hashTab.add(new Emp(1024,"1024"));
hashTab.list();
}
}
class HashTab {
private EmpLinkList[] lists;
private int size;
public HashTab(int size) {
this.size = size;
this.lists = new EmpLinkList[size];
//此时的数组里的每个元素list还没有初始化
//所以需要进行初始化
for (int i = 0; i < size; i++) {
lists[i] = new EmpLinkList();
}
}
public void add(Emp emp){
lists[hashFun(emp.id)].add(emp);
}
public void list(){
for (int i = 0; i < size; i++) {
lists[i].list(i);
}
}
//静态方法只能调用静态函数,所以这里不要用静态方法
private int hashFun(int id) {
return id % size;
}
}
class EmpLinkList {
private Emp head;
public void add(Emp emp) {
if (head == null) {
head = emp;
return;
}
Emp cur = head;
while (true) {
if (cur.next == null) {
break;
}
cur = cur.next;
}
cur.next = emp;
}
public void list(int no) {
if (head == null) {
System.out.print("当前链表为空");
}
while (true) {
if (head == null) {
break;
}
System.out.print("第"+no+"号链表的id号员工" + head.id + "姓名为" + head.name+"\t");
head = head.next;
}
System.out.println();
}
}
//创建雇员类
class Emp {
public int id;
public String name;
public Emp next;
public Emp(int id, String name) {
this.id = id;
this.name = name;
}
}
写了一下哈希表(散列表)的基本数据结构哈,只写了添加和遍历方法,查找和删除方法也一样的道理我就不写了,欢迎各位在评论区留言讨论~