首先你要修改下上一节之前的Demo,修改如下:
import java.util.ArrayList;import java.util.List;public class ArrayListDemo { public static void main(String[] args) { //默认大小是0 List hostList = new ArrayList(); hostList.add("host1"); }}上面代码,假设你通过add方法向hostList添加了1个host主机地址。ArrayList第一次调用add方法发生了什么?
你可以点击进去,看到如下代码清单:
/** * Appends the specified element to the end of this list. * * @param e element to be appended to this list * @return true (as specified by {@link Collection#add}) */ public boolean add(E e) { ensureCapacityInternal(size + 1); // Increments modCount!! elementData[size++] = e; return true; }看之前,我又要多说两句,源码的注释和方法名,有时候能资助你了解这个方法大致的作用。这是很关键的一点。好比注释的意思是add方法是追加一个具体的元素到list的末尾;方法名ensureCapacityInternal,是确保内部容量的意思。看过之后,你应该可以猜到这方法大致是确认容量相关的,可能是判断容量能否添加元素用的。
还要注意的是,你看一个方法的时候,不要着急直接从第一个行就开始看,也是先根据注释和方法名有一个大概的认识后,你需要看下整个方法的结构之后再开始。好比调用了哪些其他方法,有几个for循环或if结构。就像这个add方法,他紧张有2步,第一步是调用了一个方法,应该是确保内部容量是否够添加元素,第二步是一个数组根本赋值操作并且size++一下。
如下图所示: