https://blog.csdn.net/fighterandknight/article/details/61240861
参考上面文章
新建ArrayList对象,首先执行构造方法,构造方法中调用父类方法AbstractList,然后生成一个长度为10的Object数组。
1.add方法
先确认数组容量够不够,在实际值下标后面顺延一位,判断是不是大于当前默认数组长度,如果大于默认数组长度,则自动扩容(oldCapacity * 3)/2 + 1;
最后把值放到当前位置。
2.addAll
先拿到新的list的长度,然后判断当前数组总长度是不是大于当前数组+新数组长度,不是的话就需要扩容,然后调用系统方法创造一个新的数组,将所有值放进去。
3.Clone
克隆方法,讲当前数组重新拷贝一份(深拷贝)listA = (ArrayList) listB.clone();。如果是简单的值传递listA = listB;,那么这两个list指向的堆都是一样的。
4.Remove
Remove方法就是通过下面这个方法来实现删除的。
System.arraycopy(a, 1, b, 0,4);
例: int[] a={1,2,3,4,5};
从a的下标1开始复制长度为4的数组
拷贝到b 从b的下标0开始覆盖。
5.Clear
就是将数组清空。
6.Contains 和String里面的Contains类似,判断是否包含某个值
7.lastIndexOf 从后往前判断是否含有某个值,并返回下标。
8.Equals 判断两个list内容是不是相等
9.isEmpty 判断数组里面大小。
10.Set 在指定位置插入元素。
测试代码:
import java.util.ArrayList;
public class ReadArrayList {
public static void main(String[] args) {
ArrayList listA = new ArrayList();
ArrayList listB = new ArrayList();
listB.add(“1”);
listB.add(“2”);
listB.add(“3”);
listB.add(“4”);
listB.add(“5”);
listB.add(“6”);
listB.add(“7”);
listB.add(“8”);
listB.add(“9”);
listA.addAll(listB);
listA = (ArrayList) listB.clone();
listA = listB;
listA.add(“10”);
listA.size();
listA.get(0);
listA.indexOf(0);
listA.remove(1);
listA.clear();
listA.contains(“1”);
listA.lastIndexOf(“5”);
listA.equals(“1”);
listA.isEmpty();
}
}