[英]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.