Java HashSet怎么添加遍历元素


本篇内容主要讲解“JavaHashSet怎么添加遍历元素”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaHashSet怎么添加遍历元素”吧!1.HashSet实现了Set接口2.HashSet底层实际上是由HashMap实现的3.可以存放null,但是只能有一个null4.HashSet不保证元素是有序的(即不保证存放元素的顺序和取出元素的顺序一致),取决于hash后,再确定索引的结果5.不能有重复的元素HashSet底层是HashMapHashMap底层是数组 + 链表 + 红黑树1.HashSet底层是HashMap2.当添加一个元素时,会先得到待添加元素的hash值,然后将其转换成一个索引值3.查询存储数据表(Node 数组)table,看当前待添加元素所对应的索引值的位置是否已经存放了其它元素4.如果当前索引值所对应的的位置不存在其它元素,就将当前待添加元素放到这个索引值所对应的的位置5.如果当前索引值所对应的位置存在其它元素,就调用待添加元素.equals(已存在元素)比较,结果为true,则放弃添加;结果为false,则将待添加元素放到已存在元素的后面(已存在元素.next = 待添加元素)1.HashSet的底层是HashMap,第一次添加元素时,table数组扩容到cap = 16threshold(临界值) = cap * loadFactor(加载因子 0.75) = 122.如果table数组使用到了临界值 12,就会扩容到cap * 2 = 32,新的临界值就是32 * 0.75 = 24,以此类推3.在 Java8 中,如果一条链表上的元素个数到达TREEIFY_THRESHOLD(默认是 8),并且table的大小 >=MIN_TREEIFY_CAPACITY(默认是 64),就会进行树化(红黑树)4.判断是否扩容是根据++size > threshold,即是否扩容,是根据HashMap所存的元素个数(size)是否超过临界值,而不是根据table.length()是否超过临界值1.HashSet的底层是HashMapHashSet的迭代器也是借由HashMap来实现的2.HashSet.iterator()实际上是去调用HashMapKeySet().iterator()3.KeySet()方法返回一个KeySet对象,而KeySetHashMap的一个内部类4.KeySet().iterator()方法返回一个KeyIterator对象,KeyIteratorHashMap的一个内部类5.KeyIterator继承了HashIterator(HashMap的内部类) 类,并实现了Iterator接口,即KeyIteratorHashItera免费云主机域名tor才是真正实现迭代器的类6.当执行完Iterator iterator = HashSet.iterator;之后,此时的iterator对象中已经存储了一个元素节点怎么做到的?回到第 4 步,KeySet().iterator()方法返回一个KeyIterator对象new KeyIterator()调用KeyIterator的无参构造器在这之前,会先调用其父类HashIterator的无参构造器因此,分析HashIterator的无参构造器就知道发生了什么nextcurrentindex都是HashIterator的属性Node[] t = table;先把Node数组talbe赋给tcurrent = next = null;currentnext都置为nullindex = 0;index置为0do {} while (index 这个do-while会在table中遍历Node结点一旦(next = t[index++]) == null不成立时,就说明找到了一个table中的Node结点将这个节点赋给next,并退出当前do-while循环此时Iterator iterator = HashSet.iterator;就执行完了当前iterator的运行类型其实是HashIterator,而HashIteratornext中存储着从table中遍历出来的一个Node结点7.执行iterator.hasNext此时的next存储着一个Node,所以并不为null,返回true8.执行iterator.next()I.Node e = next;把当前存储着Node结点的next赋值给了eII.(next = (current = e).next) == null判断当前结点的下一个结点是否为null(a). 如果当前结点的下一个结点为null,就执行do {} while (index ,在table数组中遍历,寻找table数组中的下一个Node并赋值给next(b). 如果当前结点的下一个结点不为null,就将当前结点的下一个结点赋值给next,并且此刻不会去table数组中遍历下一个Node结点III.将找到的结点e返回IV.之后每次执行iterator.next()都像(a)(b)那样去判断遍历,直到遍历完成到此,相信大家对“JavaHashSet怎么添加遍历元素”有了更深的了解,不妨来实际操作一番吧!这里是百云主机网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

相关推荐: Vue组件Toast显示框怎么用

本篇内容介绍了“Vue组件Toas免费云主机域名t显示框怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!效果展示代码分析div包含icon小图标和文字说明,…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 03/20 19:18
下一篇 03/20 19:18

相关推荐