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),就会进行树化(红黑树)
*/
模拟一个HashSet的底层(HashMap 的底层结构)(简单的数组加链表)
最新推荐文章于 2024-11-03 11:01:20 发布