动态数组和可变长度数组有什么区别?
维基百科中有两张关于此的单独表格:
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/