调整数组大小

时间:2013-09-05 11:28:53

标签: java processing

如果我声明了一个数组(例如int a [5])有什么方法可以改变 a [] 的长度(说到3 )?即,我需要将 a.length 的值减少到50。

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

我还想再多一点。 如果 a [] 数组动态,我已输入 100 元素。稍后我需要修改相同的数组,删除最后50个元素。现在数组应该只有50个元素,代码 a.length 应该返回值50.我怎样才能实现这个目标? 注意:我不想使用第三个变量或将内容复制到另一个数组。这是为了避免浪费记忆。

6 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

int [] A = new int[5]; 

你真正说的是你有一个名为'A'的对象,你想在那里放入一个整数和大小为5的数组。你不能改变那个数组。你可以通过说:

将“A”整数和整数3放入一个新的数组中
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更优雅地做到这一点,可以直接调整大小;

从技术上讲,这是将数组复制到一个新数组中,但它可能就是你要找的

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

如果您打算多次修改数组,最好使用Collections框架中的类。对于原始字节,数组或ByteBuffer更合适(但即使ByteBuffer也无法动态调整大小)。

此外,记忆是一个问题吗?我们谈论了多少数据? 1GB? 2GB? 10GB?

答案 4 :(得分:0)

不确定其他语言,但在JAVA中,您无法更改array大小。唯一的选择是创建一个较小/较大的新数组并适当地复制内容。这与ArrayList用于动态增加其大小的逻辑相同。影响arraylist如何增长的因素有很多,因此查看源代码可以为您提供更多的洞察力。

答案 5 :(得分:0)

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