哈希表(散列表)

哈希表(散列表)

例子:
在这里插入图片描述

基本介绍
在这里插入图片描述
在这里插入图片描述
思路:
在这里插入图片描述

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;
    }
}

写了一下哈希表(散列表)的基本数据结构哈,只写了添加和遍历方法,查找和删除方法也一样的道理我就不写了,欢迎各位在评论区留言讨论~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值