发动态

没有新消息

更多内容

说一下 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时,就会转为红黑树,红黑树是一种相对平衡的有效二叉树,他查询的时间复杂度要比列表更低;

0 赞+1
0
评论

0 条评论

暂无评论,快来写下您的评论

热门职位推荐
热门公司推荐