iterator() Iterator Iterable listIterator

75 篇文章 2 订阅

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”);
    }
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SK Primin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值