ArryList为什么无法自动扩容1.5倍?

我用默认方法创建一个ArrayList<>,视频里说默认长度是10,然后自动扩容到1.5倍,但是我用idea观察list长度,他并没有自动扩容,而是插入几笔数据长度就是几。

package com.pack1;

import com.sun.xml.internal.bind.v2.runtime.output.StAXExStreamWriterOutput;

import java.util.ArrayList;

import java.util.List;

public class TestClass {

public static void main(String[] args) {

List<Integer> list=new ArrayList<Integer>();

for(int i=0;i<20;i++){

list.add(i);

if(i==0){

System.out.println("i==0");

}

if(i==9){

System.out.println("i==9");

}

if(i==10){

System.out.println("i==10");

}

if(i==11){

System.out.println("i==11");

}

System.out.println("i=="+i);

}

}

}

当i=13,list长度是14,但是视频里说扩容是1.5倍,也就是list的index应该到14。不知道为什么,求高手解答!环境JDK1.8。idea2019.3.5。
补充:B站有视频,里面可以显示null的元素,而我这里不行。环境应该都差不多的。视频链接


回答:

你的理解不到位。ArrayList实例在内部维护了一个Object数组,
Object[] elementData;
同时维护了一个元素数量size
private int size;

底层数组容量为elementData.length,而不是 size。
触发扩容时,会创建一个新的更大容量的数组,将elementData中的元素放入,再替换掉之前的elementData。

elementData = Arrys.copyOf(elementData, newLength)

而此时的size依然是元素数量。


回答:

直接看List的size肯定是14
扩容1.5倍的是ArrayList里面的数组


回答:

扩容是指 ArrayList 内部持有的那个数组(也即 elementData)的长度变了,又不是 ArrayList 本身的 size 变了,ArrayList 的 size 当然是你存几个元素它就是几了。


回答:

其实仔细理解的话你就会发现是个伪命题,如果扩容之后我的size也要跟着变大,那么实际装了14个元素,确实触发了扩容,但是我的size就是扩容的大小话,那么这个容器的api size 就很有大的歧义,以及失去了它意义,反而是个浪费空间的容器。


回答:

size是指ArrayList的元素个数,不是容器的容量。其内部维护的数组你是无法访问到的

以上是 ArryList为什么无法自动扩容1.5倍? 的全部内容, 来源链接: utcz.com/p/944637.html

回到顶部