java iterator循环遍历集合(比如HashSet)的原理
Set<String>set=newHashSet<String>();set.add("fcc");set.add("yhl");set.add("ws");set.a...
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 展开
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 展开
3个回答
展开全部
Iterator<String> it = set.iterator() 这时得到一个迭代器,它的指针位于第一个元素之前。
然后我们不停地 hasNext() 再 next 得到值,当hasNext 为 false 时当然就不能去 next 了。
这背后的位置索引是在迭代器内部记录着的,我们不能直接改它的值,只能 next 去下一个。
不过像 ListIterator 则是双向的,可以 previous。递增递减都是由 next / previous 方法来操作的。
然后我们不停地 hasNext() 再 next 得到值,当hasNext 为 false 时当然就不能去 next 了。
这背后的位置索引是在迭代器内部记录着的,我们不能直接改它的值,只能 next 去下一个。
不过像 ListIterator 则是双向的,可以 previous。递增递减都是由 next / previous 方法来操作的。
追问
我就是不知道这个迭代器(it)是怎么移动的在这个循环遍历中,我打印它,它一直是一样的,然后我以为只要成功调用了next()这个函数,它内部就会自动向下指,可是并没有,你看我的问题补充,然后我就想,难道是配合hasNext(),再用next(),内部才会这样实现?我知道了,应该就是调用一次next(),它内部就会指向下一个,就好像编译器自己产生了一个内部游标(并非it,)在执行指向功能
追答
正确,这点就是跟C++不同的地方,it 本身并没有变,而 it 内部的一个 index 变化了。
展开全部
如果你用的是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指向下一个了?可是我看next()的说明,只是说返回了下一个元素啊,并没有说同时让it指向了下一个元素(类似于it=it.nextIterator())?哪里能够看到next()具体实现的代码?
追答
只看结果不看说明。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询