Iterator和foreach循环

        Collection、Map主要用于盛装其他对象,而Iterator则主要用于遍历Collection集合中的元素,Iterator对象也被称为迭代器。

      例如:

     public class IteratorTest

     {

           public static void main(String args[])

           {

                  Collection books=new HashSet();

                  books.add("轻量级Java EE企业应用实战");

                  books.add("疯狂Java讲义");

                  books.add("疯狂Android讲义");

                  Iterator it=books.iterator();

                  while(it.hasNext())

                  {

                         //it.next()方法返回的数据类型是Object类型

                        //需要强制类型转换

                        String book=(String)it.next();

                        System.out.println(book);

                        if(book.equals("疯狂Java讲义"))

                        {

                               //从集合中删除上一次next方法返回的与元素

                              it.remove();

                        }

                       //对book变量赋值,不会改变集合元素本身

                       book="测试字符串";//(1)

                  }

                 System.out.println(books);

             }

         }

     运行结果:

     轻量级Java EE企业应用实战
     疯狂Android讲义
     疯狂Java讲义
     [轻量级Java EE企业应用实战, 疯狂Android讲义]

      上面(1)对迭代变量book赋值,但当再次输出books集合时,我们看到集合里的元素没有任何改变。得出如下结论:当使用Iterator对集合元素进行迭代时,Iterator并不是把集合元素本身传给了迭代变量,而是把集合元素的值传给了迭代变量,所以修改迭代变量的值对集合元素本身没有任何影响。

      注意:Iterator必须依附于Collection对象,若有一个Iterator对象,则必然有一个与之关联的Collection对象。Iterator提供了两个方法来迭代访问Collection集合里的元素,并可通过remove()方法删除集合中上一次next()方法返回的集合元素。

     除了可以使用Iterator接口迭代访问Collection即合里的元素之外,Java5提供的foreach循环迭代访问集合元素更加便捷。

     public class ForeachTest

     {

           public static void main(String args[])

           {

                  Collection books=new HashSet();

                  books.add(new String("轻量级Java EE企业应用实战"));

                  books.add(new String("疯狂Java讲义"));

                  books.add(new String("疯狂Android讲义"));

                  for(Object obj:books)

                  {

                        String book=(String)obj;

                        System.out.println(book);

                                        if(book.equals("疯狂Android讲义"))

                                         {

                                                  //下面代码会引发ConcurrentModificationException异常

                                                  books.remove(book);

                                          }

                                 }

                                 System.out.println(books);

                        }

                }


       上面代码使用foreach循环来迭代访问Collection集合里的元素更加简洁,这就是foreach循环带来的优势。与使用Iterator接口迭代访问集合元素类似地是,foreach循环中的迭代变量也不是集合元素本身,系统只是依次把集合元素的值赋给迭代变量,因此,在foreach循环中修改迭代变量的值也没有任何实际意义。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值