如果我声明了一个数组(例如 int a[5]),是否有任何方法可以更改a[]的长度(比如 3)?即,我需要将a.length的值减小到 50。
请用我标记的任何语言告诉我解决方案。
我也想成为另一部分。如果数组a[ ]是动态创建的,并且我已经输入了100 个元素。稍后我需要通过删除最后 50 个元素来修改相同的数组。现在数组应该只有 50 个元素,代码a.length应该返回值 50。我该如何实现呢? 注意:我不想使用第三个变量或将内容复制到另一个数组。这是为了避免浪费内存。
如果我声明了一个数组(例如 int a[5]),是否有任何方法可以更改a[]的长度(比如 3)?即,我需要将a.length的值减小到 50。
请用我标记的任何语言告诉我解决方案。
我也想成为另一部分。如果数组a[ ]是动态创建的,并且我已经输入了100 个元素。稍后我需要通过删除最后 50 个元素来修改相同的数组。现在数组应该只有 50 个元素,代码a.length应该返回值 50。我该如何实现呢? 注意:我不想使用第三个变量或将内容复制到另一个数组。这是为了避免浪费内存。
C++:使用vector
. 它具有调整大小的功能。
您可能可以从其他答案中了解到,创建数组后无法更改数组的大小。当你说
int [] A = new int[5];
您真正要说的是您有一个名为“A”的对象,并且您想在其中放入一个整数数组,大小为 5。您无法更改该数组。您可以通过说:
A = new int[3];
如果你这样做(前提是你没有其他对它的引用)旧数组将被垃圾收集器丢弃。您只需将旧数组中的所有内容复制到新数组中即可!这也会改变长度。
这是一个小测试代码:
int [] a = new int[5];
a[0] = 2;
a[1] = 5;
a[2] = 1;
a[3] = 6;
a[4] = 0;
println(a.length); // prints 5
int [] temp = new int[3];
System.arraycopy(a,0,temp,0,temp.length);
a = temp;
temp = null;
println(a.length); //prints 3
这被认为是一种丑陋的方法,因为您可以使用可以直接调整大小的 ArrayList 更优雅地做到这一点;
从技术上讲,这是将数组复制到一个新数组中,但这可能是您正在寻找的
不确定其他语言,但在 JAVA 中,您无法更改array
大小。唯一的选择是创建一个更小/更大的新数组并适当地复制内容。这与用于ArrayList
动态增加其大小的逻辑相同。有不同的因素会影响 arraylist 的增长方式,因此查看源代码可以让您更深入地了解。
没有办法增加/减少为 java/c++ 中的数组分配的内存。如果您需要不同大小的容器,则应使用列表容器。如果您不想使用容器,则每次需要更改数组大小时都必须重新分配新内存
在 Java 中,您可以List
改用,尤其是ArrayList
.
您还可以检查Arrays实用程序。
您无法更改数组的大小,但可以创建一个更大的新数组并将旧数组复制到其中。如果您不想复制内容,请首先创建一个足够大的数组。
如果您打算大量修改数组,最好使用Collections
框架中的类。对于原始字节,数组或 aByteBuffer
会更合适(但甚至ByteBuffer
不能动态调整大小)。
另外,这里的内存有问题吗?我们在谈论多少数据?1GB?2GB?10GB?