在Java中创建数组和数组列表是一回事吗?

mac*_*ian 1 java arrays arraylist

创建一个数组并在Java中创建一个arraylist同样的东西?我听到很多不同的故事,如果你能指出我正确的方向,我会非常感激:)

cor*_*iKa 5

数组是原始结构.它是顺序内存,由JVM分配.

arraylist在其后面使用数组,但您无法直接访问它.它可以"增长",而常规阵列则不能.

基本上,一个arraylist开始(默认情况下),后面有一个长度为10的数组,数量为0.所以想象你有

ArrayList<Integer> myInts = new ArrayList<Integer>();
Run Code Online (Sandbox Code Playgroud)

这背后是一个像这样的数组

count = 0
array = [ null, null, null, null, null, null, null, null, null, null ]
Run Code Online (Sandbox Code Playgroud)

当你去myInts.add(5);它时这样做

count = 1
array = [ 5, null, null, null, null, null, null, null, null, null ]
Run Code Online (Sandbox Code Playgroud)

如果你添加更多,你可以得到这个

count = 10
array = [ 5, 4, 3, 2, 1, 5, 8, 3, 0, -1 ]
Run Code Online (Sandbox Code Playgroud)

如果你再添加一个(这将超出其容量),它将创建一个新阵列来支持它

count = 11
array = [ 5, 4, 3, 2, 1, 5, 8, 3, 0, -1, 9, null, null, null, null, null, null, null, null, null ]
Run Code Online (Sandbox Code Playgroud)

如果需要,可以更改后备阵列的大小.例如:

myInts.trimToSize();

count = 11 // hasn't changed
array = [ 5, 4, 3, 2, 1, 5, 8, 3, 0, -1, 9]

myInts.ensureCapacity(15);

count = 11 // hasn't changed
array = [ 5, 4, 3, 2, 1, 5, 8, 3, 0, -1, 9, null, null, null, null,]
Run Code Online (Sandbox Code Playgroud)