java 迭代器

参考:

https://www.cnblogs.com/zyuze/p/7726582.html 

https://blog.csdn.net/wangjun5159/article/details/61415358
迭代器模式:就是提供一种方法对一个容器对象中的各个元素进行访问,而又不暴露该对象容器的内部细节。

概述

  Java集合框架的集合类,我们有时候称之为容器。容器的种类有很多种,比如ArrayList、LinkedList、HashSet...,每种容器都有自己的特点,ArrayList底层维护的是一个数组;LinkedList是链表结构的;HashSet依赖的是哈希表,每种容器都有自己特有的数据结构。

  因为容器的内部结构不同,很多时候可能不知道该怎样去遍历一个容器中的元素。所以为了使对容器内元素的操作更为简单,Java引入了迭代器模式! 

  把访问逻辑从不同类型的集合类中抽取出来,从而避免向外部暴露集合的内部结构。

 

package java.util;
public interface Iterator<E> {
    boolean hasNext();//判断是否存在下一个对象元素

    E next();//获取下一个元素

    void remove();//移除元素
}
public interface Iterable<T> {
    /**
     * Returns an iterator over elements of type {@code T}.
     *
     * @return an Iterator.
     */
    Iterator<T> iterator();}

总之, Iterable 方法要求实现一个迭代器(Iterator的实现类).

foreach是JDK1.5新增加的一个循环结构,foreach的出现是为了简化我们遍历集合的行为。而要想使用foreach, 就必须要实现Iterable接口.(本质上来讲,Foreach其实就是在使用迭代器).

public static void remove(ArrayList<String> list) {
    //建议使用forEach 循环, 要求实现了Iterable接口,迭代器模式.(由于涉及删除)
    for (Iterator<String> it = list.iterator(); it.hasNext();) {
        String s = it.next();
        if (s.equals("b"))
        {
            it.remove();
        }
    }
}

在idea 里编写这段代码的时候, 有一个warning比较令人好奇.

具体意思是建议我们使用foreach循环, 但是这里的情况比较特殊, 如果使用foreach循环会抛出异常.

具体参看:

https://stackoverflow.com/questions/7728734/intellij-suggests-replacing-the-while-loop-with-a-for-each-loop-why

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

来日可期1314

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

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

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

打赏作者

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

抵扣说明:

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

余额充值