文档章节

ArrayList ListItr

A
 Antin_zhu
发布于 2016/07/02 11:07
字数 207
阅读 26
收藏 0

首先ListItr实现了ListIterator接口并继承了Itr,也就说明了ListItr具备ListIterator的所有功能。 ListIterator是Iterator的子类,它只能用于List类的访问。Iterator只能单向移动,而ListIterator可以双向移动,而且还拥有了set和add功能。 ListItr还允许你从数组的任意位置开始迭代。 以下是ListItr的源码:

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

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

        public int nextIndex() {
            return cursor;
        }

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

        @SuppressWarnings("unchecked")
        public E previous() {
            checkForComodification();
            int i = cursor - 1;
            if (i < 0)
                throw new NoSuchElementException();
            Object[] elementData = ArrayList.this.elementData;
            if (i >= elementData.length)
                throw new ConcurrentModificationException();
            cursor = i;
            return (E) elementData[lastRet = i];
        }

        public void set(E e) {
            if (lastRet < 0)
                throw new IllegalStateException();
            checkForComodification();

            try {
                ArrayList.this.set(lastRet, e);
            } catch (IndexOutOfBoundsException ex) {
                throw new ConcurrentModificationException();
            }
        }

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

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

© 著作权归作者所有

共有 人打赏支持
上一篇: Java异常限制
A
粉丝 0
博文 5
码字总数 2781
作品 0
浦东
私信 提问
【Java学习笔记】(七)ArrayList源码分析(三)

正文之前 在先前的第一篇文章以及第二篇文章中已经讲述了ArrayList的常用方法,但是没有使用迭代器,这一篇文章就来讲讲使用迭代器操作ArrayList的基本方法 主要内容: 迭代器的构造 使用迭代...

胖若两人_
2018/05/14
0
0
JDK1.8 ArrayList 源码分析

类示意图: ArrayList : 构造函数:ArrayList() ArrayList(int initialCapacity) ArrayList(Collection<? extends E> c) 初始化好的成员变量:DEFAULT_CAPACITY=10.如果使用默认的无参数构造......

zheng_pat
2016/06/11
120
0
AbstractList源码解析

它实现了 List 的一些位置相关操作(比如 get,set,add,remove),是 第一个实现随机访问方法的集合类,但 不支持添加和替换 在 抽象类中要求子类必须实现两个方法 iterator() size() 因此子类必...

芥末无疆sss
2018/10/05
0
0
【Java入门提高篇】Day27 Java容器类详解(九)——LinkedList详解

  这次介绍一下List接口的另一个践行者——LinkedList,这是一位集诸多技能于一身的List接口践行者,可谓十八般武艺,样样精通,栈、队列、双端队列、链表、双向链表都可以用它来模拟,话不...

弗兰克的猫
2018/08/02
0
0
Java容器类源码-ArrayList的最全的源码分析

本文是针对Java 1.8的源代码进行解析的,可能会和其他版本有所出入。 继承:AbstractList 实现:List, RandomAccess, Cloneable, Serializable接口 public class ArrayList extends Abstrac...

Ryane
2016/07/25
182
0

没有更多内容

加载失败,请刷新页面

加载更多

腾讯面试:一条SQL语句执行得很慢的原因有哪些?

说实话,这个问题可以涉及到 MySQL 的很多核心知识,可以扯出一大堆,就像要考你计算机网络的知识时,问你“输入URL回车之后,究竟发生了什么”一样,看看你能说出多少了。 之前腾讯面试的实...

java菜分享
26分钟前
4
0
Java 基本功 之 CAS

本文首发于个人公众号《andyqian》, 期待你的关注! 前言 在Java并发编程中,我们经常使用锁对竞争资源予以并发控制,以解决资源竞争的问题。但无论是使用 Lock 还是 Synchronized,随着锁机...

andyqian
30分钟前
3
0
信号量与条件变量的区别

注意信号量与条件变量的区别 信号量内容可见:http://www.cnblogs.com/charlesblc/p/6142868.html 信号量、共享内存,以及消息队列等System V IPC三剑客主要关注进程间通信; 而条件变量、互...

shzwork
41分钟前
0
0
在VirtualBox 6.0中安装fedora 30

操作系统安装完毕后首先进行更新。 sudo dnf update 重启虚拟机后,安装VirtualBox依赖的软件包。 sudo dnf install kernel-headers kernel-devel dkms gcc 最后,安装“增强功能”。...

gugudu
49分钟前
0
0
861. Score After Flipping Matrix

为了获得最大值,我们必须保证每一行列下标小的1尽可能的多(最高位的1尽可能多)。 首先,考虑我们可以进行的操作有 翻转列,进行列操作 翻转行,进行行操作 通过行操作 我们总是可以使得第...

reter
50分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部