ArrayList
ArrayList 是一个动态数组,也是我们最常用的集合。
/*
* 共享空数组实例用于默认大小的空实例。 我们
* 将此与 EMPTY_ELEMENTDATA 区分开来,以了解何时膨胀多少
* 添加第一个元素。(下面的注释)
*

同时也是线程不安全的,随着容器中的元素不断增加,当快溢出时,扩容为原来的1.5倍。
我们常用的size()只是看它的里面存储了多少内容的长度,而要看容量则要看他的底层数组elemnetData的容量。

import java.lang.reflect.Field;
import java.util.ArrayList;
public class Test {
public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException {
ArrayList<Integer> list = new ArrayList<>();
//根据反射获取
Class<?> clazz =Class.forName("java.util.ArrayList");
Field elementData = clazz.getDeclaredField("elementData");
elementData.setAccessible(true);
Object[] array = (Object[]) elementData.get(list);//未添加元素时
System.out.println(list.size());//0
System.out.println(array.length);//0
for (int i = 0; i <10 ; i++) {
list.add(i);
}
list.add(9,1);
Object[] array1 = (Object[]) elementData.get(list); //添加元素后
System.out.println(list.get(9)); //1
System.out.println(list.size()); //11
System.out.println(array1.length); //15 10*1.5
}
}
874

被折叠的 条评论
为什么被折叠?



