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

时间:2011-08-09 22:51:58

标签: java arrays arraylist

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

4 个答案:

答案 0 :(得分:5)

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

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

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

ArrayList<Integer> myInts = new ArrayList<Integer>();

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

count = 0
array = [ null, null, null, null, null, null, null, null, null, null ]

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

count = 1
array = [ 5, null, null, null, null, null, null, null, null, null ]

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

count = 10
array = [ 5, 4, 3, 2, 1, 5, 8, 3, 0, -1 ]

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

count = 11
array = [ 5, 4, 3, 2, 1, 5, 8, 3, 0, -1, 9, null, null, null, null, null, null, null, null, null ]

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

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,]

答案 1 :(得分:1)

您可以拥有一个基本类型数组,而ArrayList不支持基元类型。

如果使用Array而不是ArrayList,则可以节省一些内存,但不具备Java Collection Framework提供的额外功能。

答案 2 :(得分:0)

简单地说,数组不能像ArrayList那样增长。您甚至可以缩小或清除ArrayList

答案 3 :(得分:0)

不,这些不是一回事。

支持真实数组是Java语言和Java虚拟机的一部分。 JVM指令集中有特定的指令用于处理数组。

ArrayList只是一个核心Java库的一部分。在内部,它将元素存储在Java数组中。将其与其他列表实现(如LinkedList

进行比较

实际上,像List这样的ArrayList实现提供了比数组更多的功能。例如,ArrayList可以具有不同的大小,并且如果需要更多空间,则将重新分配基础数组。