创建数组并在Java中创建 arraylist 同样的东西?我听到很多不同的故事,所以如果你能指出我正确的方向,我会非常感激:)
答案 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
可以具有不同的大小,并且如果需要更多空间,则将重新分配基础数组。