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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨朝辉 中级黑马   /  2012-3-24 21:16  /  2032 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1.                 ArrayList al=new ArrayList();
  2.                 al.add("java01");
  3.                 al.add("java02");
  4.                 al.add("java03");
  5.                
  6.                 Iterator itr=al.iterator();
  7.                 while(itr.hasNext())
  8.                 {
  9.                         System.out.println(itr.next());
  10.                 }
复制代码
Iterator本身是一个接口,里面的方法也是抽象方法,怎么就能遍历ArrayList?

5 个回复

倒序浏览
因为ArrayList实现Iterable接口,Iterable接口里面有iterator()方法,返回值是一个Iterator对象,就是这句代码Iterator itr=al.iterator();
有了对象就可以调用Iterator接口的hasNext方法这个方法是判断集合里面还有没有元素可以取出,有的话可以调用next方法把元素取出
回复 使用道具 举报
private class Itr implements Iterator<E> {
回复 使用道具 举报
本帖最后由 刘旭 于 2012-3-24 22:21 编辑

在抽象类AbstractList里面定义的内部类 private class Itr implements Iterator<E>里面定义了取得数据的next  hasNext 等方法,而此抽象类的Iterator方法代码如下:
public Iterator<E> iterator() {
        return new Itr();
}即返回了一个迭代器。

此抽象类实现了Iterable<E>, Collection<E>, List<E>接口,ArrayList又继承了AbstractList,所以,它具有iterator方法,而iterator方法又有取出List集合中元素的方法。
这是特定与List接口的迭代器。在HashSet   TreeSet中也有相应的特定于自己的迭代器。
具体情况请查看源代码。
回复 使用道具 举报
迭代器:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。
迭代器角色,仅仅定义了遍历接口,具体迭代器角色是定义在容器角色中的内部类
迭代器的实现://迭代器角色,仅仅定义了遍历接口  
 public interface Iterator {   
       boolean hasNext();  
      Object next();  
      void remove();  
 }
public abstract class AbstractList extends AbstractCollection implements List
{  
   ……  
 //这个便是负责创建具体迭代器角色的工厂方法   
  public Iterator iterator()
{   
return new Itr();
}
}
回复 使用道具 举报
已经实现了 迭代的方法 ,API 你瞧瞧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马