iterator() Iterator Iterable listIterator

iterator() Iterator Iterable listIterator

关系

以ArrayList类举例

implements
extends
extends
ArrayList集合
List接口
Collection接口
Iterable接口

在这里插入图片描述

  • iterator() 为Iterable接口的抽象方法,抽象方法要在具体的实现类中得到实现,如ArrayList中的具体代码:

    public Iterator<E> iterator() {
          
          
        return new Itr();
    }
    
  • Iterator接口为iterator()方法的返回值,其有两个经典方法hasNext();E next();

    boolean hasNext();
    
    E next();
    
  • 增强for循环的底层也是通过迭代器实现的:

ArrayList类对hasNext(); E next();的具体实现,仅截取关键部分

public class ArrayList<E> {
    
    
    transient Object[] elementData; // 非私有以简化嵌套类访问
    private int size;
    
    private class Itr implements Iterator<E> {
    
    
        int cursor;       // 要返回的下一个元素的索引
        int lastRet = -1; // 返回的最后一个元素的索引,如果没有,则为 -1
        int expectedModCount = modCount;

        public boolean hasNext() {
    
    
            return cursor != size;
        }

        public E next() {
    
    
            checkForComodification();
            int i = cursor;
            Object[] elementData = ArrayList.this.elementData;
            cursor = i + 1; // cursor下移
            return (E) elementData[lastRet = i]; //将元素输出
        }
    }
}
  • listIterator 处理迭代器与list不能同时操作问题

    ArrayList<String> list = new ArrayList<>();
    list.add("aa");
    list.add("bb");
    list.add("cc");
    //解决办法:引入新的迭代器:ListIterator,迭代和添加操作都是靠ListIterator来完成的:
    ListIterator<String> it = list.listIterator();
    while(it.hasNext()){
          
          
        if("bb".equals(it.next())){
          
          
        	it.add("kk");
    	}
    }
    

    if(“bb”.equals(it.next())){
    it.add(“kk”);
    }
    }

    
    
    

猜你喜欢

转载自blog.csdn.net/m0_46530662/article/details/119762577