A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王海龙2013 中级黑马   /  2013-3-22 14:18  /  1419 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王海龙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]


评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

4 个回复

倒序浏览
你是先执行完了while(li.hasNext()),再去执行while(li.hasPrevious())//反向遍历,的
执行while(li.hasNext())中你不是已经li.add("5");//添加了新的元素了么,那么在反向遍历的时候就会把这个元素也遍历到了

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
blackcaismine 发表于 2013-3-22 14:28
你是先执行完了while(li.hasNext()),再去执行while(li.hasPrevious())//反向遍历,的
执行while(li.hasNex ...

那么要是正向遍历还会执行到吗
回复 使用道具 举报
王海龙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
回复 使用道具 举报
blackcaismine 发表于 2013-3-22 15:25
可以执行到,但是注意,如果你直接在第一段的
while(li.hasNext())
{

明白了,钻死角了,谢谢了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马