JavaHashSet底层机制(数组+链表+红黑树)

文字描述

1) HashSet底层是HashMap

2)添加一个元素时,先得到hash值-会转成->索引值

3) 找到存储数据表table,看这个索引位置是否已经存放的有元素

4) 如果没有,直接加入

5) 如果有,调用equals比较,如果相同,就放弃添加,如桑不相同,则添加到最后

6) 在Java8中,如果一条链表的元素个数超过TREEIFY_THRESHOLD(默认是8),并且table的大小>=MINTREEIFY_CAPACITY(默认64),就会进行树化(红黑树)

HashSetSource.java代码描述了HashSet底层机制

package com.hspedu.set_;

public class HashSetStructure {

public static void main(String[] args) {

//1.创建一个数组,数组的类型是 Node[]

//2.有些人,直接把 Node[]数组称为表

Node[] table = new Node[16];

//3. 创建节点

Node john = new Node("john", null);

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

table[3] = lucy; // 将lucy放在 table表的索引为3的位置

System.out.println("table=" + table);

}

}

class Node {

Object item; //存放数据

Node next; //指向下一个节点

public Node(Object item, Node next) {

this.item = item;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值