java.util之Iterable与Iterator

package java.lang;
import java.util.Iterator;

public interface Iterable<T> {

    Iterator<T> iterator();}

Iterable位于java.lang包中,它持有一个Iterator引用

package java.util;

public interface Iterator<E> {    boolean hasNext();

    E next();

    void remove();}

Iterator也是一个接口,包含三个方法,hasNext, next, remove

public interface Collection<E> extends Iterable<E> {}

java.util.Collection继承自java.lang.Iterable, jdk的作者为什么要这么设计,为什么Collection接口不直接从Iterator继承?

其实这也是一种设计模式:Iterator设计模式

为什么这么设计,如果Collection直接从Iterator继承,那么Collection的实现类必须直接实现hasNext, next, remove方法。

1.这么做会造成代码混乱,迭代代码与Collection本身实现代码混淆在一起,造成阅读困难,而且有方法重复,比如remove,不能做到迭代与本身实现分离

2.在Collection实现类中必须包含当前cursor指针,在并发时处理相当尴尬

3.访问接口不统一,Collection从Iterable继承的话,在迭代时只需拿到其Iterator(内部类实现),用统一的对象迭代,而且多个迭代器可以做到互不干扰

时间: 2024-12-13 20:04:36

java.util之Iterable与Iterator的相关文章

Java中的Iterable与Iterator详解

在Java中,我们可以对List集合进行如下几种方式的遍历: List<Integer> list = new ArrayList<>(); list.add(5); list.add(23); list.add(42); for (int i = 0; i < list.size(); i++) { System.out.print(list.get(i) + ","); } Iterator it = list.iterator(); while (i

Iterator迭代器使用造成java.util.NoSuchElementException异常

使用Iterator迭代器出现错误java.util.NoSuchElementException 错误写法: Iterator<Map<String, Object>> it = list.iterator(); while(it.hasNext()){ if(it.next().get("listSrc") != null && "C".equals(it.next().get("listSrc").t

源码(07) -- java.util.Iterator&lt;E&gt;

java.util.Iterator<E> 源码分析(JDK1.7) --------------------------------------------------------------------------------- java.util.Iterator<E>是一个接口,它的定义如下: 1 public interface Iterator<E> { 2 3 boolean hasNext(); 4 5 E next(); 6 7 void remove

java----数据结构与算法----集合元素的遍历:迭代器--------&gt;JavaAPI:java.util.Iterator+java.util.ListIterator

概述: 迭代器用于集合元素的遍历 迭代器有两种,分别是Iterator和ListIterator Iterator可以用于任何类型集合的遍历 ListIterator只能用于List集合的遍历 ListIterator接口继承了Iterator接口,所以前者拥有后者所定义的所有成员函数,同时,ListIterator还添加了一些具有List集合特性的操作函数,如按照索引访问集合元素.替换/添加集合元素等等 java.util.Iterator /** * @author chen * @date

源码(03) -- java.util.Collection&lt;E&gt;

 java.util.Collection<E> 源码分析 --------------------------------------------------------------------------------- java.util.Collection<E>是一个接口,它的定义如下: 1 public interface Collection<E> extends Iterable<E> { 2 // Query Operations 3 //

java源码(4) -- java.util.Collection

我也不知道看源码有什么用,就是想去看看... java.util.Collection 这是一个接口,是java中集合框架的根接口. 下面来具体看看该接口中定义了哪些方法 public interface Collection<E> extends Iterable<E>{ //操作集合元素的方法 boolean add(E e);//将元素E添加到该集合中 boolean addAll(Collection<? extends E> c);//将集合c添加到该集合中

JDK的帧--java.util包装工具库

题词 JDK,Java Development Kit. 首先,我们必须认识到,,JDK但,但设置Java只有基础类库.它是Sun通过基础类库开发,这是唯一的.JDK书写总结的类库.从技术含量来说,还是在一个层级上,它们都是须要被编译成字节码.在JRE中执行的.JDK编译后的结果就是jre/lib下的rt.jar.我们学习使用它的目的是加深对Java的理解,提高我们的Java编码水平. 本系列全部文章基于的JDK版本号都是1.7.16. 源代码下载地址:https://jdk7.java.net

java.util.ConcurrentModificationException 解决 Android

java.util.ConcurrentModificationException 解决       Android  java 在项目里面 遇到了这个bug : E/AndroidRuntime(22055): java.util.ConcurrentModificationException E/AndroidRuntime(22055):      at java.util.ArrayList$ArrayListIterator.next(ArrayList.java:569) 查看了下

JDK源码简析--java.util包中的工具类库

题记 JDK,Java Development Kit. 我们必须先认识到,JDK只是,仅仅是一套Java基础类库而已,是Sun公司开发的基础类库,仅此而已,JDK本身和我们自行书写总结的类库,从技术含量来说,还是在一个层级上,它们都是需要被编译成字节码,在JRE中运行的,JDK编译后的结果就是jre/lib下得rt.jar,我们学习使用它的目的是加深对Java的理解,提高我们的Java编码水平. 本系列所有文章基于的JDK版本都是1.7.16. 本节内容 在本节中,简析java.util包所包