Arraylist源码必须要会的知识

1.构造方法
无参构造器:创建一个空的ArrayList,此时其数组缓冲区elementData={};长度为0,当第一次加入元素时,数组长度默认扩容到10。
2.将集合转化为Object数组
创建一个包含collection的ArrayList,利用.toArray的方法将集合转化为数组(elementData),若转化失败,则使用.copyof的方法继续转化,判断该数组长度是否为0.替换空数组。
3.调整数组缓冲区elementData,变为实际存储大小Arrays.copyof,先判断size是否为0,如果为0,实际存储就是EMPTY_ELEMENTDATA(初始容量),如果有数据就是Arrays.copyof(elementData,size)(实际容量)。
4.扩容机制:第一次加入元素时,若用户指定的最小容量>最小扩容量,则以用户指定为准,否则为10(第一次扩容至少为10),后续扩容为1.5*size
5.查找(indexof&&lastIndexof):
 先判断被查找元素是否为null,如果为null,使用==,若不为null,则使用equals方法。找到返回被查找元素(o)的所在下标,否则返回-1;若传来的是下标,则会判断下标是否越界,越界报出异常,没越界返回值
6.复制(clone)
  实现了cloneable接口,为深度复制,对拷贝出来的ArrayList对象的操作,不会影响原来的ArrayList,对需要进行复制的引用变量,进行独立的拷贝:将存储的元素移入到新的ArrayList中
7.添加(add&&addall)
 先确定ArrayList数组容量大小,按照当前的情况,保证姚村多少元素就分配多少空间,
  在指定位置插入:先判断下标是否越界,原先在index位置的值向后移动一位,在指定位置插入值。
8.删除(remove(index))
 先判断下标是否越界,找到要移除的指定元素,将index之后的所有元素左移一位。并将最后一位置null(长度不减小)
 remove?(object o):若传来的是元素,判断该元素是否为空,找到第一个指定的元素(只删除第一个),若成功,返回true,没找到返回false 
 fastRemove(int index):直接找到下标,左移,最后一位置null,不返回值,不检查。
9.清空(clear)
 将所有的元素置null

你可能感兴趣的:(Java,集合)