黑马程序员技术交流社区
标题:
用for循环,为什么不能打印出逆向取出容器中的对象?
[打印本页]
作者:
彭柏良
时间:
2014-12-3 09:53
标题:
用for循环,为什么不能打印出逆向取出容器中的对象?
在正向和逆向取出容器中的元素时,我用while循环可以按照正向和逆向的顺序取出容器中的元素,但用for循环时,却只能正向取出,但逆向却取不出来?为什么?求解答。
下面是我的代码:import java.util.*;
class CollectionDemo8
{
public static void main(String[] args)
{
ArrayList al = new ArrayList();
al.add("java01");
al.add("java02");
al.add("java03");
for(ListIterator li = al.listIterator();li.hasNext();)
{
Object obj = li.next();
if(obj. equals("java02"))
{
li.set("java008");
}
//sop(obj);
}
sop(al);
for(ListIterator li = al.listIterator();li.hasPrevious();)
{
sop("pre:"+li.previous());
}
下面是我用while循环的代码:
import java.util.*;
class CollectionDemo8
{
public static void main(String[] args)
{
ArrayList al = new ArrayList();
al.add("java01");
al.add("java02");
al.add("java03");
ListIterator li = al.listIterator();
while(li.hasNext())
{
Object obj = li.next();
if(obj. equals("java02"))
{
li.set("java008");
}
//sop(obj);
}
sop("修改后的对象:"+al);
while(li.hasPrevious())
{
sop("pre:"+li.previous());
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
作者:
caobin
时间:
2014-12-3 09:55
本帖最后由 caobin 于 2014-12-3 10:11 编辑
因为如果你前面使用for循环的话,在顺序取完之后迭代器就消失了。你在逆序取的时候又新建一个迭代器,这时那个迭代器指的位置是在前面,所以你问他hasPrevious,他会得到一个false的答案,所以就取不出来了。我用下面的验证了一下,这样就可以取出来
import java.util.*;
class hh
{
public static void main(String[] args)
{
ArrayList al = new ArrayList();
al.add("java01");
al.add("java02");
al.add("java03");
ListIterator li = al.listIterator();
while(li.hasNext())
{
sop("nex:"+li.next());
}
for(;li.hasPrevious();)
{
sop("pre:"+li.previous());
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
复制代码
作者:
彭柏良
时间:
2014-12-3 12:10
对。是的。for循环结束后,里面的东西也跟着释放了。明白了。谢谢!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2