1、默认arrayList的集合未初始化,集合元素的数量为0,容量也是0
- 集合元素的数量 就是 size
- 容量就是底层数组的长度 length
ArrayList<Integer> arrayList = new ArrayList<>();
System.out.println(ClassLayout.parseInstance(arrayList).toPrintable());
java.util.ArrayList object internals:
OFF SZ TYPE DESCRIPTION VALUE
0 8 (object header: mark) 0x0000000000000001 (non-biasable; age: 0)
8 4 (object header: class) 0x0000d7a0
12 4 int AbstractList.modCount 0
16 4 int ArrayList.size 0
20 4 java.lang.Object[] ArrayList.elementData []
Instance size: 24 bytes
Space losses: 0 bytes internal + 0 bytes external = 0 bytes total
2、第一次使用时会初始化:集合元素的数量为1,容量是10
ArrayList<Integer> arrayList = new ArrayList<>();
arrayList.add(1);
System.out.println(ClassLayout.parseInstance(arrayList).toPrintable());
java.util.ArrayList object internals:
OFF SZ TYPE DESCRIPTION VALUE
0 8 (object header: mark) 0x0000000000000001 (non-biasable; age: 0)
8 4 (object header: class) 0x0000d7a0
12 4 int AbstractList.modCount 1
16 4 int ArrayList.size 1
20 4 java.lang.Object[] ArrayList.elementData [1, null, null, null, null, null, null, null, null, null]
Instance size: 24 bytes
Space losses: 0 bytes internal + 0 bytes external = 0 bytes total
3、第一次扩容:第11次添加数据时扩容,集合元素的数量为11,容量扩容为15
ArrayList<Integer> arrayList = new ArrayList<>();
arrayList.add(1);
for (int i = 2; i <=10; i++) {
arrayList.add(i);
}
arrayList.add(11);
System.out.println(ClassLayout.parseInstance(arrayList).toPrintable());
java.util.ArrayList object internals:
OFF SZ TYPE DESCRIPTION VALUE
0 8 (object header: mark) 0x0000000000000001 (non-biasable; age: 0)
8 4 (object header: class) 0x0000d7a0
12 4 int AbstractList.modCount 11
16 4 int ArrayList.size 11
20 4 java.lang.Object[] ArrayList.elementData [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, null, null, null, null]
Instance size: 24 bytes
Space losses: 0 bytes internal + 0 bytes external = 0 bytes total
4、 实现通用的数组:ArrayList
- 初始化:内部使用数组保存数据
- 方法:是否为空,是否已满,获取元素个数,新增数据,删除数据,修改数据,获取指定索引位置的数据,遍历打印:正序反序,扩容,缩容