如果我声明了一个数组(例如int a [5])有什么方法可以改变 a [] 的长度(说到3 )?即,我需要将 a.length 的值减少到50。
请用我标记的任何语言告诉我解决方案。
我还想再多一点。 如果 a [] 数组动态,我已输入 100 元素。稍后我需要修改相同的数组,删除最后50个元素。现在数组应该只有50个元素,代码 a.length 应该返回值50.我怎样才能实现这个目标? 注意:我不想使用第三个变量或将内容复制到另一个数组。这是为了避免浪费记忆。
答案 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 ++中无法增加/减少为数组分配的内存。 如果您需要具有不同大小的容器,则应使用列表容器。如果您不想使用容器,则每次需要更改阵列大小时都必须重新分配新内存