繁体   English   中英

动态数组与可变长度数组

[英]Dynamic arrays vs Variable-length arrays

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

Wikipedia中有两个关于此的单独的工作表:

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

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

但是,区别并不十分清楚。

您能否用某种编程语言给出一个不是可变长度的动态数组示例,反之亦然。

可变长度数组具有在运行时设置一次的可变大小
动态数组也是可变长度数组,但是它们在创建后也可以调整大小(重新尺寸) 这使阵列可以增长以容纳超出其原始容量的其他元素。 如果使用数组,则必须手动调整数组大小或覆盖现有数据。

例如,在C#中,数组(如int[] )是可变长度数组。 列表(如List<int>ArrayList )是动态调整大小的数组。 列表在其.Add()方法中隐藏了一些调整大小的内容,因此开发人员不必自己担心。

有四种数组:

1)动态数组

2)可变长度数组

3)定长数组

4)静态数组

让我们更详细地考虑这四个数组。

1) 动态数组

在这种情况下,数组中有一个API会更改length变量。 它可以是直接修改长度的方法

setSize(int newLength)

或直接修改它的方法:

add(Object newElement)

remove(Object toBeRemoved)

这两种方法在添加/删除元素后都会修改长度。 Java中模拟动态数组的示例:

的java.util.ArrayList

2) 可变长度数组

可变长度数组是动态数组的特例。 在这种情况下, length是只读的,数组中没有API可以修改此变量。 但是此变量可以由系统以其他方式更改。 Java中的示例,它模拟可变长度数组-像int[]这样的常规Java数组。 让我们考虑示例:

int [] a =新的int [5]; 的System.out.println(则为a.length);

a = new int [10]; 的System.out.println(则为a.length);

在这种情况下, length变量已更改,但我们不能像这样直接修改它

长度= 20;

3) 定长数组

固定长度数组是可变长度数组的一种特殊情况。 在这种情况下,一旦为length分配了一个值,我们将无法再对其进行修改。 但是需要注意的是, length变量仍然在运行时确定的, Java的Example实例模仿了这种行为:final数组变量,例如final int[]

让我们考虑示例:

final int [] a;

如果(someVar> 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};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM