arrays - 动态数组与可变长度数组

标签 arrays

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

维基百科中有两张关于此的单独表格:

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

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

但是区别不是很明显。

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

最佳答案

数组有四种:

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 = 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 > 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};

关于arrays - 动态数组与可变长度数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33347751/

相关文章:

c - 如何在其他函数中使用二维数组?不知道如何让它发挥作用

php - 如果在另一个数组中找到,则删除一个数组的元素

c# - 通过引用传递数组的修改

arrays - 我如何将这些单独的标签压缩为自定义 UICollectionView 单元格中的标签数组?

c# - 如何过滤数组以删除错误的值(如噪声)?

arrays - 如何在 f# 中将记录字段定义为数组?

c - C 中空指针的自由数组

arrays - awk 中的算术运算符无效

javascript - 如何将逗号字符串拆分为两个变量?

python - 根据索引从 Pandas 系列列表中提取到另一个