ArrarList

ArrarList<E>


  • 是一个类
  • 实现的接口:List、Collectin、Iterable、Serializable、Cloneable、RandomAccess
  • 子类:AttributeList、RoleList、RoleUnresolvedList

##简介

  • 它是顺序表
  • 大小可变
  • 允许null元素
  • 可LinkedList一样,不具备线程同步的安全性、但速度较快
  • 第一次定义的时候没有指定数组的长度则长度是0,在第一次添加的时候判断如果是空则追加10。

##容量是如何变化的

在源码中:

private transient Object[] elementData;

用于保存对象。它会随着元素的添加而改变大小。在下面的叙述中,容量指的是elementData.length,而不是size。

size不是容量,ArrayList对象占用的内存不是由size决定的。 size的大小在每次调用add(E e)方法时加1。 如果是调用ArrayList(Collection<? extends E> c)构造方法,则size的初始值为c

  • 如果在初始化时,没有指定大小,则容量大小为0。
  • 当大小为0时,第一次添加元素容量大小变为10。
  • 之后每次添加时,会先确保容量是否够用
  • 如果不够用,每次增加的容量为 newCapacity = oldCapacity + (oldCapacity >> 1);即,每次增加为原来的1.5倍。

##和Vector的区别

  • Vector线程安全
  • ArrayList线程不安全,速度快

##和LinkedList的区别

  • ArrayList是顺序表,LinkedList是链表
  • ArrayList查找,修改方便,LinkedList添加、删除方便

##方法

void ensureCapacity(int minCapacity) 设置容量能容纳下minCapacity个元素

  • 如果
updatedupdated2024-04-032024-04-03