数组+链表实现HashTable

博客内容仅提及了“结果”,未包含更多关键信息,难以形成有效摘要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
 * 存储的对象
 */
@Data
public class Emp {
    private Integer id;
    private String name;
    private Emp next;

    public Emp(Integer id, String name, Emp next) {
        this.id = id;
        this.name = name;
        this.next = next;
    }
}

/**
* 链表
*/
public class EmpLinkedList {
    private Emp head;


    public void add(Emp emp) {
        if (head == null) {
            head = emp;
            return;
        }
        Emp currentEmp = head;
        while (currentEmp.getNext() == null) {
            currentEmp = currentEmp.getNext();
        }
        currentEmp.setNext(emp);
    }

    public void list(Integer i) {
        if (head == null) {
            System.out.println("第"+(i+1)+"个链表为空");
            return;
        }
        System.out.print("第"+(i+1)+"个链表内容-->");
        Emp currentEmp = head;
        while (currentEmp != null) {
            System.out.println("id:" + currentEmp.getId() + "名字:" + currentEmp.getName());
            currentEmp = currentEmp.getNext();
        }
    }
}

/**
 * 数组+链表实现HashTable
 */
public class HashTable {
    //数组+链表
    private EmpLinkedList[] empLinkedListArray;
    //散列函数要用
    private Integer size;

    //构造函数
    public HashTable(Integer size) {
        empLinkedListArray = new EmpLinkedList[size];
        this.size = size;
        //注意:这里要初始化每一个链表
        for (int i = 0; i < size; i++) {
            empLinkedListArray[i] = new EmpLinkedList();
        }
    }

    /**
     * 添加
     *
     * @param emp
     */
    public void add(Emp emp) {
        //确定该员工要放在哪个链表
        Integer num = hashFun(emp.getId());
        empLinkedListArray[num].add(emp);
    }

    /**
     * 查询
     */
    public void list() {
        for (int i = 0; i < size; i++) {
            empLinkedListArray[i].list(i);
        }
    }

    /**
     * 散列函数,由多种实现方案,这里选择最简单的取模方式
     *
     * @param id
     * @return
     */
    private Integer hashFun(Integer id) {
        return id % size;
    }
}

//测试
public class HashTableDemo {
    public static void main(String[] args) {
        Emp emp1 = new Emp(1,"1",null);
        Emp emp3 = new Emp(3,"3",null);
        Emp emp4 = new Emp(4,"4",null);
        Emp emp2347 = new Emp(2347,"2347",null);

        HashTable hashTable = new HashTable(7);
        hashTable.add(emp1);
        hashTable.add(emp3);
        hashTable.add(emp4);
        hashTable.add(emp2347);
        hashTable.list();
    }

结果

第1个链表为空
第2个链表内容-->id:1名字:1
第3个链表内容-->id:2347名字:2347
第4个链表内容-->id:3名字:3
第5个链表内容-->id:4名字:4
第6个链表为空
第7个链表为空
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值