模拟一个HashSet的底层(HashMap 的底层结构)(简单的数组加链表)

package com.collection_.set_;

@SuppressWarnings({"all"})
public class HashSetStructure {
    public static void main(String[] args) {
        //模拟一个HashSet的底层(HashMap 的底层结构)(简单的数组加链表)

        //1.创建一个数组,数组的类型是 Node[]
        Node[] table = new Node[16];
        System.out.println("table=" + table);
        //2. 创建一个结点
        Node john = new Node("jhon",null);
        //3. 让数组下标为2的地方放jack
        table[2] = john;
        Node jack = new Node("jack", null);
        john.next = jack;// 将jack结点挂载到john
        Node rose = new Node("Rose", null);
        jack.next = rose;//将rose结点挂载到jack

        Node lucy = new Node("lucy", null);
        //4. 让数组下标为3的地方放lucy
        table[3] = lucy;

    }
}
class Node{ //结点,存储数据,可以指向下一个结点,从而形成链表
    Object item;//存放数据
    Node next;//指向下一个结点

    public Node(Object item, Node next) {
        this.item = item;
        this.next = next;
    }
}
/*
    分析HashSet的添加底层是如何实现(hash()+equals)
        1. HashSet底层是HashMap
        2. 添加一个元素时,先得到hash值 - 会转成->索引值
        3. 找到存储数据表table,看到这个索引位置是否已经存放的有元素
        4. 如果没有,直接加入
        5. 如果有,调用equals比较,如果相同,则添加到最后
        6. 在Java8中,如果一条链表的元素个数到达TREElFY_THRESHOLD(默认是8),并且table的大小 >=MIN_TREElEF_CAPACITY(默认64),就会进行树化(红黑树)
 */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值