黑马程序员技术交流社区

标题: 迭代器问题 [打印本页]

作者: 王海龙2013    时间: 2013-3-22 14:18
标题: 迭代器问题
本帖最后由 王海龙2013 于 2013-3-22 15:20 编辑
  1. import java.util.*;
  2. class Lis
  3. {
  4.         public static void main (String[] args)
  5.         {
  6.                 ArrayList al = new ArrayList();
  7.                 al.add("1");
  8.                 al.add("2");
  9.                 al.add("3");
  10.                
  11.                 ListIterator li = al.listIterator();
  12.                 while(li.hasNext())
  13.                 {
  14.                         Object obj = li.next();
  15.                         if(obj.equals("2"))
  16.                                 li.add("5");//添加
  17.                                 //li.set("6");//替换
  18.                                 //li.remove();//删除
  19.                         
  20.                         System.out.println(obj);
  21.                         //1
  22.                 }
  23.                 while(li.hasPrevious())//反向遍历,
  24.                 {               
  25.                         System.out.println(li.previous()+"-");//2
  26.                 }
  27.                 System.out.println(al);//3
  28.         }
  29. }
复制代码
为什么1和2打印的不同啊,应该是同一个迭代器啊打印结果1
2
3
3-
5-
2-
1-
[1, 2, 5, 3]



作者: blackcaismine    时间: 2013-3-22 14:28
你是先执行完了while(li.hasNext()),再去执行while(li.hasPrevious())//反向遍历,的
执行while(li.hasNext())中你不是已经li.add("5");//添加了新的元素了么,那么在反向遍历的时候就会把这个元素也遍历到了
作者: 王海龙2013    时间: 2013-3-22 15:01
blackcaismine 发表于 2013-3-22 14:28
你是先执行完了while(li.hasNext()),再去执行while(li.hasPrevious())//反向遍历,的
执行while(li.hasNex ...

那么要是正向遍历还会执行到吗
作者: blackcaismine    时间: 2013-3-22 15:25
王海龙2013 发表于 2013-3-22 15:01
那么要是正向遍历还会执行到吗

可以执行到,但是注意,如果你直接在第一段的
while(li.hasNext())
{
    Object obj = li.next();
    ...
   }
后面直接加 while(li.hasNext())是没有效果的,因为之前已经遍历到了结尾,你可以先while(li.hasPrevious())//反向遍历到开头,再重新while(li.hasNext()),就可以看到正向遍历出了1 2 5 3
或者重新ListIterator li2 = al.listIterator();
正想遍历li2也可以得到结果1 2 5 3
作者: 王海龙2013    时间: 2013-3-22 21:42
blackcaismine 发表于 2013-3-22 15:25
可以执行到,但是注意,如果你直接在第一段的
while(li.hasNext())
{

明白了,钻死角了,谢谢了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2