没有新消息
更多内容
0 条评论
暂无评论,快来写下您的评论
问题来自于
咔啡
说一下 HashSet 的实现原理?
5286
阅读
2
回答
@2024 职Q 智联招聘
合作商务邮箱:sbyh@zhaopin.com.cn
友情链接
HR圈内招聘/ 同道问答/ 人资知识社区
51社保/ X职场/ HR Bar/ 中人网/ 研招网
京ICP备17067871号 合字B2-20210134
京公网安备 11010502030147号
人力资源许可证:1101052003273号
网上有害信息举报专区
违法不良信息举报电话:400-885-9898
关爱未成年举报热线:400-885-9898-7
朝阳区人力资源与社会保障局 监督电话: 57596212,65090445
说一下 HashSet 的实现原理?
ØHashSet和TreeSet两个实现类;底层是基于map的,只是取了map的key ØMap主要有HashMap和TreeMap两个实现类 hashMap底层是一个数组+Entry对象的单向列表组成的;在创建是默认不开辟空间;在添加第一个值的时候开辟空间,默认数组长度为16;Entry里边主要包含key、value、next和hash4个值;当给hashmap添加1个值时,首先先把当前值new 成一个entry对象;hash是根据key计算出来的hashcode值。把这个值和数组的长度求余,根据这个余数来确定entry存放在数组的位置;找到位置以后,首先把位置中原先的值,拿出来,放到当前entry的next里边;最后在把当前entry放到这个位置;hashmap的默认扩容因子是0.75;当map中的值超过3/4时,会自动扩容,扩容到原理的2倍; jdk1.8中,当某个列表长度大于8,总大小大于64时,就会转为红黑树,红黑树是一种相对平衡的有效二叉树,他查询的时间复杂度要比列表更低;