作者:SIX2FOUR | 来源:互联网 | 2023-10-11 12:58
ArrayList是一个java.lang.Object类,继承java.util.AbstractCollection类,继承java.util.AbstractList类,继承java.util.ArrayList。
实现的接口:
Serializable,Cloneable,Iterable,Collection,List,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 | iterator() 按照正确的顺序返回一个iterator |
int | lastIndexOf(Object o) 返回最后一次出现在list中的对象的index,如果不存在就返回-1 |
ListIterator | listIterator() |
ListIterator | 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 operator) 将运算符作用在每一个元素上的结果,替换列表中的每一个元素 |
boolean | retainAll(Consume> c) 只保留此列表中包含在指定集合中的元素 |
E | set(int index,E element) 用指定元素替换列表中指定的位置的元素 |
int | size() 返回列表中的元素的数量 |
void | sort(Comparator super E> c) 根据指定比较其中的顺序对该列表中的元素进行排序 |
Spliterator | spliterator() 在此列表中的元素上创建延迟绑定和故障快速Spliterator |
List | subList(int fromIndex,int toIndex) 返回列表中的指定的包含的fromIndex和包含的toIndex之间的部分的视图 |
Object[] | toArray(T[] a) 返回一个数组,该数组按适当的顺序(从第一个元素到最后一个元素)包含列表中的所有元素。返回的数组是安全的买这个列表不维护对它的引用,这个方法必须分配一个新的数组,因此,调用者可以自由地修改返回的数组。同Array.asList(Object[]) |
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