Java集合Collection中迭代器Iterator的原理和使用方法

1、迭代器Iterator在集合中的作用

迭代器是集合的专用遍历方式,它是依赖于集合而存在的,由集合对象调用 iterator() 方法而创建,常用于获取集合中的对象元素。
集合的获取功能:

  • Iterator iterator():迭代器,集合的专用遍历方式
    Object next():获取元素,并移动到下一个位置。
    boolean hasNext():如果仍有元素可以迭代,则返回true。
	集合的获取功能的使用通常都为以下步骤:
	//A:创建集合
    Collection c = new ArrayList();
    
    //B:创建元素对象,这里以创建一个学生对象(name,age)为例
    Student s = new Student("张三",21);
    
    //C:把元素添加到集合
    c.add(s);
    
    //D:遍历集合,通常hasNext()辅助于next()使用
    //通过集合获取Iterator对象
    Iterator it = c.iterator(); //返回值类型是接口,实际上要的是它的实现类对象,实际返回的是new Itr(); 
    //使用it遍历
    while(it.hasNext()){
    	it.next();  //得到集合中的学生对象元素
    }

2、迭代器为什么是一个接口,而不定义成一个具体的类?

假设迭代器定义的是一个类,这样我们就可以创建一个迭代器类的对象,调用该类的方法实现集合的遍历。但是,Java中提供了很多集合类,而这些集合类的数据结构是不同的,所以存储方式和遍历方式也是不同的,所以最终就没有定义集合类。

无论是哪一种集合,都应该具备获取元素的操作,并且最好是辅助于判断功能,这样,在获取前,先判断,这样就更不容易出错。也就是说,判断功能和获取功能应该是一个集合遍历所具备的。每一种集合的方式又不太一样,所以就把这两个功能给提取出来,并不提供具体实现,这种方式就是接口。

那么真正的具体实现类在哪里呢?在真正的具体子类类里,以内部类的方式体现。

3、迭代器的源码解析

public interface Iterator{         //Iterator是一个接口
    public abstract boolean hasNext();
    public abstract Object next();
}
public interface Iterable {
    Iterator iterator();
    //用于集合对象创建迭代器的方法,返回一个迭代器,Iterator是一个接口,所以要使用实现类实例化
}

public interface Collection extends Iterable { //继承自Iterable接口,所以可以调用iterator()方法
    Iterator iterator();
    //在这接口Iterator的成员方法没有重写
}

public interface List extends Collection{
    Iterator iterator();
    //在这里中,接口Iterator的成员方法依然没有重写
}

public class ArrayList implments List{
    public Iterator iterator() { //在这里,终于实现了
            return new Itr();
    }
    
    //这里用了一个内部类实现了Iterator接口
    private class Itr implements Iterator {
         public boolean hasNext(){...}//这里重写了hasNext()方法
         public E next() {...} //这里重写了next()方法
         
    }
}

你可能感兴趣的:(Java基础知识)