该类继承于AbstractList,里面对于数据和结构的操作如下。
trimToSize();更新size,如果size小于(数组的)lenth,则更新size的大小。
public void ensureCapacity(int minCapacity)确保容量,如果不够就扩容成原来的1.5倍+1;
public int size() 容量
public boolean isEmpty();判断是否为空。
public boolean contains(Object o)判断是否有这个对象
public int indexOf(Object o)找到标签。
public int lastIndexOf(Object o)找到最后一次出现的位置。
public Object clone()克隆,返回新的一个对象
public Object[] toArray() ,变成数组,返回一个obj的数组。
public <T> T[] toArray(T[] a),变成T类型的数组。
public E get(int index)通过标签访问元素。
public E set(int index, E element)重新设置某个标签的元素。
public boolean add(E e) 添加一个元素。
public void add(int index, E element)在指定位置插入元素
public E remove(int index)清除,有检查。
public boolean remove(Object o)删除这个对象,不需要进行检查。
private void fastRemove(int index) 快速删除,内部使用,不需要进行检查。
public void clear()清除这个数组链表。
public boolean addAll(Collection<? extends E> c)吧一个集合类的所有元素都添加到后边。
public boolean addAll(int index, Collection<? extends E> c)在指定的位置后面插入所有的元素。
protected void removeRange(int fromIndex, int toIndex) 删除指定范围内的元素。
private void RangeCheck(int index) 检查范围,只有内部能用。
List和ArrayList 如果不把类型T指出来,那么返回的会是一个Object。
看了ArrayList 的add(int,E)源码和add(E)源码 lastIndexOf(object o)这是查找
这个obj最后出现的位置(找到了返回位置,没有这个元素返回-1,这个元素为空返回最
后一个位置)。clone方法。
toArray方法
public <T> T[] toArray(T[] a) {
if (a.length < size)
// Make a new array of a's runtime type, but my contents:
return (T[]) Arrays.copyOf(elementData, size, a.getClass());
System.arraycopy(elementData, 0, a, 0, size);
if (a.length > size)
a[size] = null;这里为什么不是一直改成null到size=a.lenth
return a;
}
remove(index),先做边界检查,然后将大小-1,然后将所有元素向前复制一个位置。
返回已删除了。
remove(E),删除这个对象。fastremove(私有)这个不做任何检查,不用保存已删除
的元素。。。modCount是从结构上改变这个ArrayList的次数。
addall