-6

如果我声明了一个数组(例如 int a[5]),是否有任何方法可以更改a[]的长度(比如 3)?即,我需要将a.length的值减小到 50。

请用我标记的任何语言告诉我解决方案。

我也想成为另一部分。如果数组a[ ]动态创建的,并且我已经输入了100 个元素。稍后我需要通过删除最后 50 个元素来修改相同的数组。现在数组应该只有 50 个元素,代码a.length应该返回值 50。我该如何实现呢? 注意:我不想使用第三个变量或将内容复制到另一个数组。这是为了避免浪费内存。

4

6 回答 6

1

C++:使用vector. 它具有调整大小的功能。

于 2013-09-05T11:36:28.793 回答
1

您可能可以从其他答案中了解到,创建数组后无法更改数组的大小。当你说

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 更优雅地做到这一点;

从技术上讲,这是将数组复制到一个新数组中,但这可能是您正在寻找的

于 2013-09-05T12:54:23.080 回答
0

不确定其他语言,但在 JAVA 中,您无法更改array大小。唯一的选择是创建一个更小/更大的新数组并适当地复制内容。这与用于ArrayList动态增加其大小的逻辑相同。有不同的因素会影响 arraylist 的增长方式,因此查看源代码可以让您更深入地了解。

于 2013-09-05T11:32:19.843 回答
0

没有办法增加/减少为 java/c++ 中的数组分配的内存。如果您需要不同大小的容器,则应使用列表容器。如果您不想使用容器,则每次需要更改数组大小时都必须重新分配新内存

于 2013-09-05T11:33:42.380 回答
0

在 Java 中,您可以List改用,尤其是ArrayList.

您还可以检查Arrays实用程序。

于 2013-09-05T11:30:37.340 回答
0

您无法更改数组的大小,但可以创建一个更大的新数组并将旧数组复制到其中。如果您不想复制内容,请首先创建一个足够大的数组。

如果您打算大量修改数组,最好使用Collections框架中的类。对于原始字节,数组或 aByteBuffer会更合适(但甚至ByteBuffer不能动态调整大小)。

另外,这里的内存有问题吗?我们在谈论多少数据?1GB?2GB?10GB?

于 2013-09-05T11:30:41.697 回答