黑马程序员技术交流社区
标题:
迭代器如何用?
[打印本页]
作者:
张成龙
时间:
2012-4-26 19:05
标题:
迭代器如何用?
import java.util.*;
class CollectionDemo
{
public static void main(String[] args)
{
method_get();
}
public static void method_get()
{
ArrayList al = new ArrayList();
al.add("java01");
al.add("java02");
al.add("java03");
al.add("java04");
//Iterator it= al.iterator();
while(al.iterator().hasNext())
{
System.out.println(al.iterator().next());
}
}
}
Iterator it= al.iterator();这句注释掉之后为什么一直打印java01?
作者:
徐鑫
时间:
2012-4-26 19:14
//Iterator it= al.iterator();
while(al.iterator().hasNext())//这里这么写就是每次都生成一个新的迭代器,而al的第一个值是java01,因此成死循环,一直打印java01
{
System.out.println(al.iterator().next());
}
}
作者:
高彰谦
时间:
2012-4-26 19:29
public Iterator<E> iterator() {
return new Itr();
}
复制代码
这是iterator()方法的源码,更清楚了吧。
作者:
高彰谦
时间:
2012-4-26 19:30
public Iterator<E> iterator() {
return new Itr();
}
复制代码
这是iterator()方法的源码,更清楚了吧。
作者:
崔仁军
时间:
2012-4-26 19:33
因为你在while 循环的条件里写al.iterator().hasNext()相当于是每循环一次都会生成一个迭代器 判断是否还有下一个如果有就是true ,那么每次都会生成迭代器都会有下一个都会判断为true,就成了死循环,就不停的打印那一个
修改代码如下:
import java.util.*;
class CollectionDemo
{
public static void main(String[] args)
{
method_get();
}
public static void method_get()
{
ArrayList al = new ArrayList();
al.add("java01");
al.add("java02");
al.add("java03");
al.add("java04");
for(Iterator iter = al.iterator();iter.hasNext();)
{
String str = (String ) a1.next();
System.out.println(str);
}
}
}
作者:
光sail
时间:
2012-4-26 19:36
楼主创建的迭代器很少见,也许是迭代器只能用固定的格式书写,其他格式不读取;
下面的代码运行起来就比较正常了
public static void main(String[] args)
{
method_get();
}
public static void method_get()
{
ArrayList al = new ArrayList();
al.add("java01");
al.add("java02");
al.add("java03");
al.add("java04");
Iterator it= al.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
}
}
打印输出为 java01
java02
java03
java04
作者:
chenwei
时间:
2012-4-26 19:39
不注释也会死循环了,al.iterator()就是获取一个新的迭代器 ,就变成每次循环都重新获取迭代器,重新从第一个开始找,就一直循环了
//Iterator it= al.iterator();
while(al.iterator().hasNext())
改成
Iterator it= al.iterator();
{
System.out.println(it.next());
}
while(ithasNext())
作者:
亚男
时间:
2012-4-26 19:50
因为al是集合ArrayList的对象,而Iterator是专门的集合框架迭代器只有他的对象才能执行hasNext()或next()方法,所以当去掉Iterator it= al.iterator()后al不能自动迭代
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2