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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 神之梦 金牌黑马   /  2013-6-9 18:54  /  1238 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我们都知道ListIterator是List集合特有的迭代器,今天拿它做练习时,发现挺有意思,和大家分享下。。。
一、猜下下面程序的结果:
  1. <p>import java.util.*;
  2. import static java.lang.System.*;</p><p>class ListIteratorDemo
  3. {
  4. public static void main(String[] args)
  5. {
  6.   ArrayList<String> list=new ArrayList<String>();
  7.   list.add("java01");
  8.   list.add("java02");
  9.   list.add("java03");</p><p>  out.println("原集合list:"+list);
  10.   
  11.   for (ListIterator<String> it=list.listIterator();it.hasNext() ; )
  12.   {
  13.    it.add("add");
  14.    out.println("添加了元素后的list:"+list);</p><p>   it.set("set");
  15.    out.println("改了元素后的list:"+list);</p><p>   out.println(it.next());//打印下一个元素
  16.   }
  17. }
  18. }

  19. </p><p> </p>
复制代码
结果是这样的:

出错啦!!!!
好吧这是我们没有看API的原因,不知道大家猜的结果是什么样滴。。。
看下API是怎么说的:

那现在改下顺序:
  1. for (ListIterator<String> it=list.listIterator();it.hasNext() ; )
  2.                 {
  3.                         it.add("add");
  4.                         out.println("添加了元素后的list:"+list);
  5.                        
  6.                         out.println(it.next());//打印下一个元素
  7.                        
  8.                         it.set("set");
  9.                         out.println("改了元素后的list:"+list);       
  10.                        
  11.                         break;//为了观看结果,一次over好了
  12.                 }
复制代码
结果:


二、好了改了之后我们的程序可以正常运行了,再来猜下下面程序的结果,也只是改了下顺序:
  1. for (ListIterator<String> it=list.listIterator();it.hasNext() ; )
  2.                 {
  3.                        
  4.                         out.println(it.next());//打印下一个元素
  5.                        
  6.                         it.set("set");
  7.                         out.println("改了元素后的list:"+list);       

  8.                         it.add("add");
  9.                         out.println("添加了元素后的list:"+list);
  10.                        
  11.                         break;//为了观看结果,一次over好了
  12.                 }
复制代码
结果:

在API中有这样对add描述的一段话:
将指定的元素插入列表(可选操作)。该元素直接插入到 next 返回的下一个元素的前面(如果有)。
在上一个程序时,我们把add放在第一的位置,也就是先于next执行的时候,元素是被添加到第一位,而add在next后执行,元素就被添加到了下一个元素前面。
把break注释掉,我们会看到这样的结果:


以上两例可以总结出:
1、set方法要放next方法之后才不会报错,如果next后跟了add(或者remove)再跟set就会报错;
2、set方法改变的是next方法返回的值,而不是第一位置的那个元素。
3、add方法添加的是next方法返回的下一个元素前面,而不是在第一元素位置前面添加。当没用调用next方法时,add方法添加的元素会被放在第一元素位置的前面。

三、想看个死循环么?
  1. for (ListIterator<String> it=list.listIterator();it.hasNext() ; )
  2.                 {

  3.                         out.println(it.next());//打印下一个元素
  4.                         out.println(it.previous());//打印前一个元素
  5. }
复制代码
这样就可以了,有时候没事也可以用previous玩玩,和next的用法差不多。

一时兴起写了个资源共享,对大部分人来说都只是小孩子玩意,大家随便看看就好了,欢迎大家指正点评{:soso_e160:}

评分

参与人数 1技术分 +2 黑马币 +5 收起 理由
袁梦希 + 2 + 5 淡定

查看全部评分

2 个回复

倒序浏览
很厉害   康苗
回复 使用道具 举报

希希最近很忙啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马