ArrayList源码层
构造方法:
有参数:
参数为int,如果参数大于0,创建一个大小为参数值的容器赋值给elementData;如果参数等于0,让elementData等于EMPTY_ELEMENTDATA;如果参数小于0,抛出一个异常。
参数为其他容器(容器的元素类型必须和你创建的这个容器的泛型及它的子类保持一致),
无参数:
如果没有参数,就让elementData等于DEFAULTCAPACITY_EMPTY_ELEMENTDATA
ensureCapacity()方法
ensureCapacityInternal(int minCapacity)方法
判断elementData是否为空,如果为空,minCapacity取两者中最大值,然后调用ensureExplicitCapacity(minCapacity)。
ensureExplicitCapacity(int minCapacity)方法
判断minCapacity是否大于elementData的长度,如果大于,调用
grow(minCapacity)。
grow(int minCapacity)方法
判断扩容之前数组长度的1.5倍是否大于minCapacity,如果大于则扩容至老数组的1.5倍,如果小于则扩容至minCapacity这么长。
Collection接口
List
JAVA对于常用的List是会给出具体的实现方案的。也就是说,JAVA给出了常用List的实现类型,如果我们需要使用List,那么直接调用List的实现类就可以了
ArrayList
add():向容器中增加一个元素。没有参数就默认加在已有元素之后,有参数(add(int, E)就先检查参数指定位置有没有越界,然后在指定位置增加一个元素,在它之后的指定元素统一后移,容器长度加一。
remove():参数为int的话先检查有没有越界,然后移除指定位置元素,后面的元素统一往前移。如果参数为对象则在容器中遍历元素,找到第一个指定元素移除,返回ture,后面的元素统一前移,容器长度减一。如果没有找到则返回false。
set(int, E):将指定位置元素替换为指定元素。
get(int):先检查指定角标有没有越界,没有越界则找到指定位置的元素并返回。
size():返回容器的长度。
LinkedList
set
容器
Java提供给我们的最常用的容器的顶级接口(顶级接口就是在这个实现链上,他基本已经到了最高的一个接口了)。
容器本身不包含角标概念,容器的子接口有List,set,这些子接口部分有角标概念,List是collection的子接口,有get, set方法。
基本操作分成定位,求长,替换。