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;
同时维护了一个元素数量sizeprivate 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