`

ArrayList 迭代器模式

阅读更多
在面试中,迭代器被问到了很多次,今天来总结一下。

从一个例子说起。
 public static void main(String args[]){
    	List list=new ArrayList();
    	
    	list.add(2);
    	list.add(5);
    	list.add(7);
    	
    	Iterator Itr=list.iterator();
    	while(Itr.hasNext()){
    		System.out.println(Itr.next());
    	}
    }


上面的例子很简单,但说明了迭代器最基本的结构:
1. 得到迭代器;
2. 判断是否有元素;
3. 获取元素。

现在到源码里去看它们是怎样实现的。

 public Iterator<E> iterator() {
        return new Itr();
    }


其实它里面有一个内部类的,再看这个类的成员有哪些。

  // 初始值为0,这个与C语言不一样,C是不确定的值
  int cursor;       // index of next element to return
  int lastRet = -1; // index of last element returned; -1 if no such
  int expectedModCount = modCount;


下面是hasNext()方法的实现。
 public boolean hasNext() {
            return cursor != size;
 }



简单吧,就是判断当前的指针是否到最后了,我们猜测当前指针的变化应该是在next()方法中实现的。

public E next() {
            checkForComodification();
            int i = cursor;
            if (i >= size)
                throw new NoSuchElementException();
            Object[] elementData = ArrayList.this.elementData;
            if (i >= elementData.length)
                throw new ConcurrentModificationException();
            cursor = i + 1;
            return (E) elementData[lastRet = i];
 }


其中的elementData是存储数据的地方,这个在开始就定义了。

private transient Object[] elementData;


这个数组的初始化在什么时候完成的呢?在你new的时候,默认大小是10.

public ArrayList() {
        this(10);
 }


总体来讲,迭代器还是比较简单的吧。
分享到:
评论

相关推荐

    java迭代器模式实现正反向遍历

    在Java编程语言中,迭代器模式(Iterator Pattern)是一种常用的设计模式,用于顺序访问集合对象中的元素,而无需暴露其底层表示。这种模式提供了一种方法来访问一个聚合对象的元素,而无需暴露该对象的内部结构。在...

    设计模式之迭代器模式

    迭代器模式是一种行为设计模式,它提供了一种方法来顺序访问聚合对象的元素,而无需暴露其底层表示。在Java中,迭代器模式是通过接口实现的,这使得我们可以遍历任何实现了`Iterable`接口的对象,例如集合框架中的`...

    迭代器模式代码示例

    在Java、C#等面向对象语言中,迭代器模式被广泛应用于容器类,如ArrayList、LinkedList等,使得我们可以遍历集合中的每一个元素。 迭代器模式包含以下主要角色: 1. **迭代器接口(Iterator)**:定义了遍历集合...

    设计模式的迭代器模式的例子

    在Java、C#等面向对象语言中,迭代器模式被广泛应用于容器类,如ArrayList、LinkedList等,使得我们可以方便地遍历集合中的所有元素。 迭代器模式的主要组件包括: 1. **聚合对象(Aggregate)**:包含一组相关或...

    设计模式-迭代器模式(讲解及其实现代码)

    例如,Java集合框架大量使用了迭代器模式,使得我们可以方便地遍历集合中的元素,无论是ArrayList、LinkedList还是HashSet,都可以通过迭代器进行操作。 下面是一个简单的Java迭代器模式示例: ```java // 聚合...

    迭代器模式demo

    在Java、C#等面向对象编程语言中,迭代器模式被广泛应用于集合类库,如ArrayList、LinkedList等。这个"迭代器模式demo"可能是为了演示如何在实际代码中实现或使用迭代器模式。 在迭代器模式中,主要有四个角色: 1....

    65丨迭代器模式(上):相比直接遍历集合数据,使用迭代器有哪些优势?1

    迭代器模式是一种行为设计模式,主要目的是在不暴露集合内部结构的情况下,允许外部代码遍历集合的所有元素。这种模式将遍历操作从集合类中分离出来,实现了数据结构和遍历机制的解耦。在大多数编程语言中,迭代器...

    【Java设计模式】(1)迭代器模式Iterator

    在Java中,迭代器模式被广泛应用于集合类,如ArrayList、LinkedList等,通过Iterator接口实现对集合的遍历。 **迭代器模式的核心组件:** 1. **迭代器(Iterator)角色**:这是模式的核心,它定义了遍历元素的接口...

    设计模式之迭代器模式(新)

    迭代器模式是软件设计模式中的一种行为模式,它允许我们顺序访问聚合对象的元素,而无需暴露其底层表示。在“设计模式之迭代器模式(新)”中,我们将深入探讨这种模式的核心概念、实现方式以及它在实际编程中的应用...

    java体系结构之迭代器模式.rar

    迭代器模式是软件设计模式中的一种行为模式,它允许我们顺序访问聚合对象的元素,而无需暴露其底层表示。在Java中,迭代器模式广泛应用于集合框架,如List、Set和Map接口,使得程序员可以方便地遍历集合中的元素。 ...

    设计模式--迭代器模式java例子

    在Java中,迭代器模式广泛应用于集合框架,如ArrayList、LinkedList等。本示例将深入探讨如何在Java中实现和使用迭代器模式。 首先,我们需要理解迭代器模式中的几个关键角色: 1. **聚合类(Aggregate)**:它...

    (行为型模式) Iterator 迭代器模式

    ### (行为型模式) Iterator 迭代器模式 #### 概述 在软件工程领域,设计模式被广泛应用于解决常见的编程问题。其中,“迭代器模式”作为一种行为型设计模式,在处理集合类对象时发挥着重要作用。本文将详细介绍...

    一个小小例子让你读懂迭代器模式,

    在Java、C#等面向对象语言中,迭代器模式被广泛应用于集合类,如ArrayList、LinkedList等。这些集合类提供了迭代器接口,使得用户可以通过迭代器来逐个访问集合中的元素,而无需关心集合的内部实现。例如,在Java中...

    迭代器模式java实现

    在Java中,迭代器模式的实现主要依赖于`java.util.Iterator`接口和`java.util.ArrayList`、`java.util.LinkedList`等集合类。 在Java中,迭代器模式的应用非常广泛,尤其是在处理集合数据时。`Iterator`接口定义了...

    迭代器模式.rar之java设计模式

    迭代器模式在Java集合框架中广泛应用,例如`ArrayList`、`LinkedList`、`HashSet`等都实现了`Iterable`接口,并提供了各自的迭代器实现。这些集合类的迭代器各自有不同的性能特点。例如,`ArrayList`的迭代器速度快...

    Android迭代器模式demo

    迭代器模式是设计模式中的一种行为模式,它提供了一种顺序访问聚合对象的元素而无需暴露其底层表示的方法。在Android开发中,迭代器模式的应用可以帮助我们更好地管理和遍历集合数据,尤其在处理复杂的逻辑或者需要...

    Java设计模式课件迭代器模式.pptx

    在Java中,迭代器模式广泛应用于集合框架,例如ArrayList、LinkedList等。 在Java中实现迭代器模式,需要定义抽象迭代器和具体迭代器,抽象迭代器定义了遍历聚合对象的接口,具体迭代器实现了抽象迭代器的接口。...

Global site tag (gtag.js) - Google Analytics