Java数据结构-通过数组封装-结构分析
2023-12-15 22:42:08
1、默认arrayList的数组未初始化
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、第一次使用时会初始化:长度为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次添加数据时扩容,扩容到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
- 初始化:内部使用数组保存数据
- 方法:是否为空,是否已满,获取元素个数,新增数据,删除数据,修改数据,获取指定索引位置的数据,遍历打印:正序反序,扩容,缩容
?5、ArrayList集合的长度和容量不是同一个意思。
- 长度(size)是指ArrayList中当前存储的元素数量。而容量(capacity)是指ArrayList内部数组可以容纳的元素数量。在ArrayList初始化时,它会创建一个内部数组,这个数组的初始大小是10。即使你还没有添加任何元素,这个数组仍然存在,所以ArrayList的初始长度是0,但初始容量是10。
- 当你向ArrayList添加元素时,如果当前长度小于容量,那么它不会重新分配数组。只有当长度超过了容量时,ArrayList才会考虑扩容,扩容后的容量通常是原容量的1.5倍加上10。
- 所以,长度和容量是两个不同的概念,但它们之间有一定的关联。
- ArrayList集合的length和capacity不是同一个意思。 ?
- length表示ArrayList集合中元素的个数,可以通过size()方法获取。 ?
- capacity表示ArrayList集合的容量,即当前ArrayList能够存储的元素个数的上限,可以通过capacity()方法获取。 ?
- 简单来说,length表示当前ArrayList中存储的元素个数,
- 而capacity表示ArrayList能够存储的元素个数的上限。当向ArrayList中添加元素时,如果超过了ArrayList的容量,ArrayList会自动扩展其容量,以容纳更多的元素。
?
文章来源:https://blog.csdn.net/m0_65152767/article/details/135025129
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!