java iterator循环遍历集合(比如HashSet)的原理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java iterator循环遍历集合(比如HashSet)的原理相关的知识,希望对你有一定的参考价值。
Set<String> set=new HashSet<String>();
set.add("fcc");
set.add("yhl");
set.add("ws");
set.add("fdd");
for(Iterator<String> it=set.iterator();it.hasNext();)
String str=it.next();
System.out.println(str);
我不是很清楚:Iterator<String> it=set.iterator();因为学过C++,C++里面的迭代器初始化一般都是指向容器的开始或者具体哪个迭代器,这里的初始化是什么意思?它也是指向集合的开始一个元素?看了API说是:返回一个在一组 T 类型的元素上进行迭代的迭代器。还是不懂
还有,一般循环不是要有个递增或递减的条件吗?这里怎么没有?这里的迭代器到底是怎么实现的?它不是指向某一个元素然后依次指下去吗?可是it没有变化啊?按我的逻辑推理应该是一直输出第一个元素= =
哪位大神能够指导一下小白啊
for(Iterator<String> it=set.iterator();it.hasNext();)
System.out.println(it.next());
String str=it.next();
System.out.println("sss"+str);
输出:
fcc
sssfdd
yhl
sssws
然后我们不停地 hasNext() 再 next 得到值,当hasNext 为 false 时当然就不能去 next 了。
这背后的位置索引是在迭代器内部记录着的,我们不能直接改它的值,只能 next 去下一个。
不过像 ListIterator 则是双向的,可以 previous。递增递减都是由 next / previous 方法来操作的。追问
我就是不知道这个迭代器(it)是怎么移动的在这个循环遍历中,我打印它,它一直是一样的,然后我以为只要成功调用了next()这个函数,它内部就会自动向下指,可是并没有,你看我的问题补充,然后我就想,难道是配合hasNext(),再用next(),内部才会这样实现?我知道了,应该就是调用一次next(),它内部就会指向下一个,就好像编译器自己产生了一个内部游标(并非it,)在执行指向功能
追答正确,这点就是跟C++不同的地方,it 本身并没有变,而 it 内部的一个 index 变化了。
参考技术A 如果你用的是eclipse,按住ctrl键,鼠标左键点next()方法就能看到了,然后关联JDK源码就可以了追问我看了帮助文档,完全没用
追答next()方法是返回下一个元素。
hasNext();判断后面还有没有元素。
改成这样就好了
String str=it.next();
System.out.println(str);
System.out.println("sss"+str);
比如1,2,3,4,5五个元素
当前元素为2,通过next()方法返回3之后,当前元素就是3了;在调用一次next()返回的就是4了。
每一次只要有it.next()出现,实际上就等于让it指向下一个了?可是我看next()的说明,只是说返回了下一个元素啊,并没有说同时让it指向了下一个元素(类似于it=it.nextIterator())?哪里能够看到next()具体实现的代码?
追答只看结果不看说明。
以上是关于java iterator循环遍历集合(比如HashSet)的原理的主要内容,如果未能解决你的问题,请参考以下文章
java中Collection集合Iterator迭代器接口for each循环遍历集合或对象