动态数组和可变长度数组之间有什么区别?
维基百科有两个单独的表格:
1)关于动态数组: https://en.wikipedia.org/wiki/Dynamic_array
2)关于可变长度阵列: https://en.wikipedia.org/wiki/Variable-length_array
但差异并不是很清楚。
你能用一些编程语言举例说明动态数组,它不是可变长度的,反之亦然。
答案 0 :(得分:2)
可变长度数组具有可变大小,在运行时设置为 动态数组也是可变长度数组,但它们在创建后也可以重新调整大小(重新维度)。这允许阵列增长以容纳高于其原始容量的其他元素。如果使用数组,则必须手动调整阵列大小或覆盖现有数据。
例如在C#中,数组(如int[]
)是可变长度数组。列表(如List<int>
或ArrayList
)是一个动态调整大小的数组。列表隐藏了.Add()
方法中的一些重新调整大小,因此开发人员不必自己担心它。
答案 1 :(得分:2)
有四种数组:
1)动态数组
2)可变长度数组
3)固定长度数组
4)静态数组
让我们更详细地考虑四个数组。
1)动态数组
在这种情况下,数组中有一个API可以改变length
变量。
它可以是直接修改长度的方法
setSize(int newLength)
或直接修改它的方法:
add(Object newElement)
remove(Object toBeRemoved)
这两种方法都会在添加/删除元素后修改长度。 Java中用于模拟动态数组的示例:
的java.util.ArrayList
2)可变长度数组
可变长度数组是动态数组的一个特例。
在这种情况下,length
是只读的,并且数组中没有修改此变量的API。
但是这个变量可以由系统以其他方式改变。
Java中用于模拟可变长度数组的示例 - 常规Java数组,如int[]
。
让我们考虑一下这个例子:
int [] a = new int [5];的System.out.println(则为a.length);
a = new int [10];的System.out.println(则为a.length);
在这种情况下,length
变量已更改,但我们无法像
a.length = 20;
3)固定长度数组
固定长度数组是可变长度数组的特例。
在这种情况下,一旦为length
分配了值,我们就不能再修改它了。
但重要的是要注意length
变量仍然在运行时确定
Java中用于模拟此行为的示例:最终数组变量,如final int[]
。
让我们考虑一下这个例子:
final int [] a;
if(someVar&gt; 0){a = new int [100]; } else {a = new int [200]; }
在这种情况下,a.length是100或200,仍然在运行时确定。
4)静态数组
静态数组是固定长度数组的特例。
在这种情况下,length
不仅可以更改,还可以在运行时确定。
Java中此类数组的示例可以是以下结构:
{1,2,3,100,200,500}
只有在初始化
时,才能将该构造赋值给变量int [] a = {1,2,3};
但是,如果我们尝试重新分配,如
a = {1,2};
我们收到编译错误。
模拟此类数组的Java示例:
final int [] a = {1,2,3};