参考:
https://www.cnblogs.com/zyuze/p/7726582.html
https://blog.youkuaiyun.com/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循环会抛出异常.
具体参看:
1万+

被折叠的 条评论
为什么被折叠?



