动态数组与可变长度数组

时间:2015-10-26 14:05:37

标签: arrays

动态数组和可变长度数组之间有什么区别?

维基百科有两个单独的表格:

1)关于动态数组: https://en.wikipedia.org/wiki/Dynamic_array

2)关于可变长度阵列: https://en.wikipedia.org/wiki/Variable-length_array

但差异并不是很清楚。

你能用一些编程语言举例说明动态数组,它不是可变长度的,反之亦然。

2 个答案:

答案 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};