`
liuzhaomin
  • 浏览: 204275 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

AbstractList

 
阅读更多
/**
     * Returns an iterator over the elements in this list in proper sequence.
     *
     * <p>This implementation returns a straightforward implementation of the
     * iterator interface, relying on the backing list's {@code size()},
     * {@code get(int)}, and {@code remove(int)} methods.
     *
     * <p>Note that the iterator returned by this method will throw an
     * {@code UnsupportedOperationException} in response to its
     * {@code remove} method unless the list's {@code remove(int)} method is
     * overridden.
     *
     * <p>This implementation can be made to throw runtime exceptions in the
     * face of concurrent modification, as described in the specification
     * for the (protected) {@code modCount} field.
     *
     * @return an iterator over the elements in this list in proper sequence
     *
     * @see #modCount
     */
    public Iterator<E> iterator() {
	return new Itr();
    }

 

private class Itr implements Iterator<E> {
	/**
	 * Index of element to be returned by subsequent call to next.
	 */
	int cursor = 0;

	/**
	 * Index of element returned by most recent call to next or
	 * previous.  Reset to -1 if this element is deleted by a call
	 * to remove.
	 */
	int lastRet = -1;

	/**
	 * The modCount value that the iterator believes that the backing
	 * List should have.  If this expectation is violated, the iterator
	 * has detected concurrent modification.
	 */
	int expectedModCount = modCount;

	public boolean hasNext() {
            return cursor != size();
	}

	public E next() {
            checkForComodification();
	    try {
		E next = get(cursor);
		lastRet = cursor++;
		return next;
	    } catch (IndexOutOfBoundsException e) {
		checkForComodification();
		throw new NoSuchElementException();
	    }
	}

	public void remove() {
	    if (lastRet == -1)
		throw new IllegalStateException();
            checkForComodification();

	    try {
		AbstractList.this.remove(lastRet);
		if (lastRet < cursor)
		    cursor--;
		lastRet = -1;
		expectedModCount = modCount;
	    } catch (IndexOutOfBoundsException e) {
		throw new ConcurrentModificationException();
	    }
	}

	final void checkForComodification() {
	    if (modCount != expectedModCount)
		throw new ConcurrentModificationException();
	}
    }

    private class ListItr extends Itr implements ListIterator<E> {
	ListItr(int index) {
	    cursor = index;
	}

	public boolean hasPrevious() {
	    return cursor != 0;
	}

        public E previous() {
            checkForComodification();
            try {
                int i = cursor - 1;
                E previous = get(i);
                lastRet = cursor = i;
                return previous;
            } catch (IndexOutOfBoundsException e) {
                checkForComodification();
                throw new NoSuchElementException();
            }
        }

	public int nextIndex() {
	    return cursor;
	}

	public int previousIndex() {
	    return cursor-1;
	}

	public void set(E e) {
	    if (lastRet == -1)
		throw new IllegalStateException();
            checkForComodification();

	    try {
		AbstractList.this.set(lastRet, e);
		expectedModCount = modCount;
	    } catch (IndexOutOfBoundsException ex) {
		throw new ConcurrentModificationException();
	    }
	}

	public void add(E e) {
            checkForComodification();

	    try {
		AbstractList.this.add(cursor++, e);
		lastRet = -1;
		expectedModCount = modCount;
	    } catch (IndexOutOfBoundsException ex) {
		throw new ConcurrentModificationException();
	    }
	}
    }

分享到:
评论

相关推荐

    JAVA初学教程教你学会JAVA4

    ### JAVA初学教程之AbstractList详解 对于Java初学者来说,理解Java集合框架的基本组成部分及其工作原理至关重要。本文将深入探讨`AbstractList`类的重要性和使用场景,帮助初学者掌握如何利用`AbstractList`来创建...

    Java源码分析:深入探讨Iterator模式

    `AbstractList`类是`List`接口的一个抽象实现,它为所有`List`子类提供了一个基本框架。在`AbstractList`类中,迭代器是由内部类`Itr`实现的。下面详细介绍`Itr`类的关键部分。 1. **构造函数**: - `AbstractList...

    基于java实现的GUI图形化界面的简单计算器,实现加减乘除、乘方,可以连续运算,带一定纠错功能

    `AbstractList`可能是作为`List`接口的一个抽象实现,提供了一些默认行为,而具体的数据结构实现(如`seqList.java`)则可能继承自`AbstractList`,覆盖或实现其方法,以满足特定的需求。 7. **类和对象**:每个`....

    java类库详解PDF格式的

    每个 PDF 文件都可能是一个专题,比如 `AbstractList.pdf` 可能详细介绍了 `AbstractList` 类的设计和使用,而 `java.io.pdf` 可能全面讲解了 Java I/O 流的用法和最佳实践。通过学习这些文档,开发者可以深入理解 ...

    java专题-迭代器

    `AbstractList`提供了一个`iterator()`方法,返回一个`Itr`对象,`Itr`是`AbstractList`的内部类,实现了`Iterator`接口,负责具体的遍历逻辑。 #### 结论 迭代器模式在Java中的应用非常广泛,尤其在集合框架中,...

    java集合学习笔记2018.5.10

    在继承关系方面,`ArrayList`继承自`AbstractList`,`AbstractList`又继承自`AbstractCollection`,同时`ArrayList`实现了`List`接口。`List`接口继承自`Collection`接口,`Collection`是最顶级的集合接口。这种层次...

    第13讲 谈谈接口和抽象类有什么区别?1

    例如,`java.util.AbstractList`是集合框架中的一个抽象类,提供了列表操作的部分实现,如`ArrayList`就是基于它进行扩展的。 在Java中,类通过`implements`关键字实现接口,通过`extends`关键字继承抽象类。例如,...

    Java程序设计 3 数组与集合.pptx

    * AbstractSequentialList抽象类,为了被类集使用并扩展AbstractList,该类集使用连续而不是随机方式访问其元素 * ArrayList通过扩展AbstractList来实现动态数组 * LinkedList通过继承AbstractSequentialList来实现...

    第05章 面向对象(下) 06 抽象类的基本概念

    此外,Java的`java.util.ArrayList`和`java.util.LinkedList`都是抽象类`java.util.AbstractList`的子类,它们都实现了`AbstractList`提供的接口和部分方法,但各自的实现方式不同,这体现了抽象类在代码结构和复用...

    深入浅出学习Java设计模式之迭代器模式[参考].pdf

    `AbstractList`抽象类提供了创建迭代器的工厂方法,这样每个具体的容器类(如ArrayList、LinkedList等)可以通过继承`AbstractList`并实现必要的方法来创建自己的迭代器。 迭代器模式的一个重要特性是多态迭代,这...

    Vector底层结构和源码分析

    public class Vector&lt;E&gt; extends AbstractList&lt;E&gt; implements List, RandomAccess, Cloneable, java.io.Serializable { ... } ``` Vector 底层也是一个对象数组,protected Object\[] elementData; 这个数组用于...

    java 自整理的基础面试知识

    例如,Vector、ArrayList既继承了AbstractList又实现了List接口,这是因为接口实现提供了默认实现,而直接继承AbstractList可以获取更多的抽象方法实现,节省代码量。装饰者模式在JDK中广泛应用,如Collections....

    【死磕Java集合】-集合源码分析.pdf

    LinkedList的继承体系中,它继承了AbstractSequentialList和AbstractList,实现了List、Queue和Deque接口。它的主要属性包括元素个数size、链表首节点first和链表尾节点last。 在LinkedList的源码中,我们可以看到...

    J2SE 1.6所有的类

    `AbstractCollection`、`AbstractList`、`AbstractMap`和`AbstractSet`是集合框架中的抽象类,它们为特定类型的集合提供了基本操作的骨架实现。例如,`AbstractList`为实现列表接口(如ArrayList和LinkedList)提供...

    Java 集合框架+集合实例

    - **AbstractList**:继承AbstractCollection并实现了大部分List接口功能。 - **AbstractSequentialList**:继承AbstractList,适合顺序访问而非随机访问。 - **AbstractSet**:实现了Set接口的一部分。 - **...

    java对象容器.docx

    - 通常,开发者应优先考虑使用已有的容器实现,但如果需要特定行为,可以创建自定义容器类,继承自AbstractCollection、AbstractList、AbstractSet或AbstractMap,以便利用已实现的方法。 总结来说,Java对象容器...

    java中文帮助文档[归类].pdf

    2. **集合框架**:Java集合框架包括AbstractCollection、AbstractList、AbstractSet等,这些抽象类提供了基本的集合操作,并为创建自定义集合类提供了便利。例如,AbstractList允许开发者实现列表接口而不必完全实现...

    java Collection 详细介绍

    - **描述**:`AbstractCollection` 是 `Collection` 接口的基本实现,它是 `AbstractList` 和 `AbstractSet` 的超类。如果你需要创建自定义的集合类型,可以考虑从 `AbstractCollection` 继承。 #### 5. **...

    Java.util包.docx

    而由于继承自AbstractList,ArrayList可以直接使用索引访问其元素,实现了RandomAccess接口,表明它支持高效的随机访问。 总之,Java.util.ArrayList是Java编程中非常重要的数据结构,它提供了一种动态、高效的方式...

    JAVA中的集合.docx

    - `Vector` 类:`Vector` 是一个线程安全的列表实现,它继承自 `AbstractList` 并实现了 `List` 接口。由于它的操作是同步的,因此在多线程环境中更安全,但在单线程环境下,它的性能通常比非同步的 `ArrayList` 差...

Global site tag (gtag.js) - Google Analytics