Java集合框架篇-42-迭代器和原理

      前面我们三篇文章来介绍集合接口的一些方法,这篇介绍剩下的一个方法iterator()。在Java中有一个Iterator的接口,这个单词的意思是迭代,其实迭代就是遍历的意思。我们知道集合是一个容器,是用来存储元素的,如果要查看元素,我们就需要遍历拿出来,这个遍历过程,由集合的iterator()方法提供。

 

1.iterator()

      一个集合先有元素,然后使用了iterator()方法之后,返回的是一个Iterator的对象。然后通过Iterator接口下的hasNext()方法和next()方法来实现元素遍历输出。下面用一段代码来演示下。

package collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class Demo1_Iterator {

   @SuppressWarnings({ "rawtypes", "unchecked" })
   public static void main(String[] args) {

     Collection c = new ArrayList();
     c.add("a");
     c.add("b");
     c.add("c");
     c.add("d");

     //对集合中的元素遍历(迭代)
     Iterator it = c.iterator();      //获取迭代器
     while(it.hasNext()) {
        System.out.println(it.next());
     } 
   }
}

输出:

a
b
c
d

      下面我们再来,迭代如何集合中是自定义对象的场景,还是需要借助前面的Student类,如果没有,请看前面文章的代码。

package collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class Demo1_Iterator {

   @SuppressWarnings({ "rawtypes", "unchecked" })
   public static void main(String[] args) {

     Collection c = new ArrayList();
     c.add(new Student("张三", 23));
     c.add(new Student("李四", 24));
     c.add(new Student("王五", 25));
     c.add(new Student("刘六", 26));
     c.add(new Student("小七", 27));

     //对集合中的元素遍历(迭代)
     Iterator it = c.iterator();      //获取迭代器
     while(it.hasNext()) {
        Student s = (Student)it.next();  //向下转型
        System.out.println(s.getName());
     } 
   }
}

输出:

张三
李四
王五
刘六
小七

2.迭代器原理

       迭代器是对集合进行遍历,而每一个集合内部的存储结构都是不同的,所以每一个集合存和取都是不一样,那么就需要在每一个类中定义hasNext()和next()方法,这样做是可以的,但是会让整个集合体系过于臃肿,迭代器是将这样的方法向上抽取出接口,然后在每个类的内部,定义自己迭代方式,这样做的好处有两点。第一是规定了整个集合体系的遍历方式都是hasNext()和next()方法,第二个好处是代码由底层内部实现,使用者不用管怎么实现的,会用就行。

       所以,上面我们演示代码的hasNext()和next()方法,调用的都是ArrayList下面的重写的方法。可以在Eclipse上打开ArrayList,然后搜索hasNext()和next(),简单看看源码的实现过程。我们可以找到,在ArrayList下有一个Itr的类实现了Iterator接口,在Itr这个子类下重写了hasNext()和next(),以及remove()方法。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值