JDK源码(二十一):ArrayList

Posted jdkSpring

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDK源码(二十一):ArrayList相关的知识,希望对你有一定的参考价值。

java.util.ArrayList是实现List接口的可调整大小的数组实现。实现所有可选的列表操作,可以存储所有类型元素,包括null。除了实现List接口之外,这个类还提供了一些方法来操作内部用于存储列表的数组的大小。(这个类大致相当于Vector,只是它是非同步的)。

类名

public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable

变量

JDK源码(二十一):ArrayList

常用方法

ArrayList()

JDK源码(二十一):ArrayList

add(E e)

JDK源码(二十一):ArrayList

在添加一个元素时,先调用ensureCapacityInternal方法进行扩容,JDK源码(二十一):ArrayList

get(int index)

JDK源码(二十一):ArrayList

remove(int index)

JDK源码(二十一):ArrayList

remove(Object o)

JDK源码(二十一):ArrayList

addAll(Collection<? extends E> c)

JDK源码(二十一):ArrayList

fail-fast 机制

即快速失败机制,是java集合(Collection)中的一种错误检测机制。当在迭代集合的过程中该集合在结构上发生改变的时候,就有可能会发生fail-fast,即抛出ConcurrentModificationException异常。fail-fast机制并不保证在不同步的修改下一定会抛出异常,它只是尽最大努力去抛出,所以这种机制一般仅用于检测bug。
List<String> list = new ArrayList<String>();for (int i = 0; i < 10; i++) { list.add(i + "");}for (String s : list){ if ("1".equals(s)){ list.remove(s); }}

如上,当在以上for循环中删除元素时,会报如下错误:

JDK源码(二十一):ArrayList

Spliterator

在jdk1.8中新增了一个Spliterator接口,是Java为了并行遍历数据源中的元素而设计的迭代器可以按顺序或并行方式对流使用Spliterator。在1.8的ArrayList中也实现了这个接口。

static final class ArrayListSpliterator<E>                    implements Spliterator<E>
List<String> arrs = new ArrayList<>();arrs.add("a");arrs.add("b");arrs.add("c");arrs.add("d");arrs.add("e");arrs.add("f");Spliterator<String> p = arrs.spliterator();//此时p为a b c d e fSpliterator<String> q = p.trySplit();//此时p为d e f q为a b cSpliterator<String> j = p.trySplit();//此时p为e f q为a b c j为dp.forEachRemaining(s -> System.out.print(s + " "));System.out.println();q.forEachRemaining(s -> System.out.print(s + " "));System.out.println();j.forEachRemaining(s -> System.out.print(s + " "));

源码(1.8)
JDK源码(二十一):ArrayList


以上是关于JDK源码(二十一):ArrayList的主要内容,如果未能解决你的问题,请参考以下文章

介绍开源的.net通信框架NetworkComms框架 源码分析(二十一 )TCPConnectionListener

Unity HTFramework框架(二十一)Debug调试器

二十一.SpringCloud源码剖析-Hystrix的初始化

Flink从入门到精通100篇(二十一)-万字长文详解 Flink 中的 CopyOnWriteStateTable

第二十一课 yum 更换国内源及下载rpm包源码包的安装

设计模式 行为型模式 -- 迭代器模式 JDK源码解析:ArrayList