ArrayList的API

版权声明:本文为博主原创作品,未经博主允许,不得转载。如有问题,欢迎指正。 https://blog.csdn.net/qq_21306815/article/details/89331616

ArrayList是一个java.lang.Object类,继承java.util.AbstractCollection<E>类,继承java.util.AbstractList<E>类,继承java.util.ArrayList<E>。

实现的接口:

Serializable,Cloneable,Iterable<E>,Collection<E>,List<E>,RandomAccess

直接子类:

AttributeList,RoleList和RoleUnresolvedList

ArrayList可以改变数组的长度,它实现了List接口,在数组中可以有任意值,包括NULL。ArrayList不仅实现了List接口,还提供了操作数组长度的方法,这个方法通常被用来在内部存储列表。ArrayList和Vector很相似,但是它不是同步的。

ArrayList的操作size、isEmpty、get、set、iterator和listIterator在常量时间内运行。add是一个线性时间的操作,也就是说增加N各元素需要时间O(n)。基本上所有的运作都是线性时间。ArrayList和LinkedList比较起来,常数因子要小很多。

每一个ArrayList的实例都有一个容量。这个容量表示ArrayList可以在List里面存储的数据的个数,至少和list的容量一样大。当元素加到ArrayList中的时候,ArrayList会自动扩容。

在使用ensureCapacity操作之前,该应用就会将ArrayList的容量增加。这样就会减少很多的元素重分配。

ArrayList是一个不同步的实现。当大量的线程同时实现ArrayList,至少有一个线程是修改了list的。ArrayList必须要在外部实现同步。对于ArrayList的操作,不管是增加还是减少其中的一个元素或者是改变支持的数组,一定是一个会改变元素的操作。这通常是通过一些封装的对象来同步实现的。如果,没有这样的对象存在,那么就会包装,并Colections.synchronizedList方法。这种方法是最好的,来防止list的不同步的意外发生。

List list = Collection.synchronizedList(new ArrayList(...));

该类的Iterator和listIterator方法返回的iterators是fail-fast的。如果iterator被创建之后,发生任何的结构改变,处理iterator自身的add操作,否则,都会抛出ConcurrentModificationException异常。因此,处理并发的情况时,iterator是快速清理的,就不会有在任意时间发生不确定情况的可能。

可见,iterator的快速清理机制是不能保证安全的,通常来说,在不同步的并发情况下,是非常难以来保证安全的。快速清理机制在力所能及的基础上会抛出ConcurrentModificationException异常。因此,写程序的时候,最好不要一来这个异常抛出来保证安全:iterator的fail-fast机制只能够用来检测bug。

ArrayList是一个Java Collection Framework的一个成员。

ArrayList是从JDK1.2就有了。

构造器总结:

ArrayList():构造一个初值为空,容量为10 的list。

ArrayList(Collection<? extends E> c):构造一个元素包含collection的list,顺序按照iterator来进行。c表示这个集合,需要用来代替原来list中的元素。

ArrayList(int initialCapacity):构造一个指定容量的空数组。

方法总结:

boolean

add(E e)

在ArrayList数组的最后增加元素

void

add(int index,E element)

在index处,插入元素

boolean

addAll(Collection Collection<? extends E> c)

将集合中的元素依次都增加到list的最后

void

addAll(int index, Collection Collection<? extends E> c)

将集合中的元素以此增加在指定的index处

void

clear()

将list中的元素清除

Object

clone()

复制ArrayList中的元素

boolean

contains(Object o)

判断list中是否有对象o

void

ensureCapacity(int minCapacity)

增加ArrayList中的容量,如果有需要,确保它至少可以满足最小容量

void

forEach(Consume<? super E> action)

遍历迭代器,直到抛出异常

E

get(int index)

返回在list的特定位置的对象

int

indexOf(Object o)

返回当前第一次出现的元素的index,如果不存在返回-1

boolean

isEmpty()

返回不存在该对象就返回true

Iterator<E>

iterator()

按照正确的顺序返回一个iterator

int

lastIndexOf(Object o)

返回最后一次出现在list中的对象的index,如果不存在就返回-1

ListIterator<E>

listIterator()

ListIterator<E> listIterator(int index)
E remove(int index)
boolean remove(Object o)
boolean removeAll(Consume<? > c)
boolean removeIf(Predicate<? super E> fileter)
protected void removeRange(int fromIndex,int toIndex)
void

replaceAll(UnaryOperator<E> operator)

将运算符作用在每一个元素上的结果,替换列表中的每一个元素

boolean

retainAll(Consume<?> c)

只保留此列表中包含在指定集合中的元素

E

set(int index,E element)

用指定元素替换列表中指定的位置的元素

int

size()

返回列表中的元素的数量

void

sort(Comparator<? super E> c)

根据指定比较其中的顺序对该列表中的元素进行排序

Spliterator<E>

spliterator() 

在此列表中的元素上创建延迟绑定和故障快速Spliterator

List<E>

subList(int fromIndex,int toIndex)

返回列表中的指定的包含的fromIndex和包含的toIndex之间的部分的视图

Object[]

toArray(T[] a)

返回一个数组,该数组按适当的顺序(从第一个元素到最后一个元素)包含列表中的所有元素。返回的数组是安全的买这个列表不维护对它的引用,这个方法必须分配一个新的数组,因此,调用者可以自由地修改返回的数组。同Array.asList(Object[])

<T> T[]

toArray(T[] a)

返回一个数组,该数组包含列表中按正确顺序排列的所有元素(从第一个元素到最后一个元素);返回数组的运行时类型是指定数组的运行时类型。如果列表符合指定的数组,则有剩余空间(即,数组中的元素比列表中的元素多),集合结束后数组中的元素被设置为null。这对于确定列表的长度很有用。T表示包含集合的数组的运行时的类型。

void

trimToSize()

将ArrayList实例的容量调整为列表的当前大小。

方法继承自java.util.AbstractList:equals,hashCode

方法继承自java.util.AbstractCollection:containsAll,toString

方法继承自java.lang.Object:finalize,getClass,notify,notifyAll,wait的三种方法

方法继承自java.util.List:containsAll, equals, hashCode

方法继承自java.util.Collection:parallelStream,stream

猜你喜欢

转载自blog.csdn.net/qq_21306815/article/details/89331616