我已经搜索了一种在Java中调整数组大小的方法,但是我找不到在保持当前元素的同时调整数组大小的方法.
我找到了类似的代码int[] newImage = new int[newWidth];,但这会删除之前存储的元素.
我的代码基本上会这样做:无论何时添加新元素,数组都会增加1.我认为这可以通过动态编程完成,但我不知道如何实现它.
Ste*_*eod 91
您无法在Java中调整数组大小.你需要:
创建所需大小的新数组,并使用将原始数组中的内容复制到新数组 java.lang.System.arraycopy(...);
使用java.util.ArrayList<T>该类,当您需要使数组更大时,它会为您执行此操作.它很好地封装了您在问题中描述的内容.
使用java.util.Arrays.copyOf(...)返回更大数组的方法,以及原始数组的内容.
jlo*_*rdo 23
不好,但有效:
int[] a = {1, 2, 3};
// make a one bigger
a = Arrays.copyOf(a, a.length + 1);
for (int i : a)
System.out.println(i);
Run Code Online (Sandbox Code Playgroud)
如前所述,请使用ArrayList
Anu*_*oob 19
这有几种方法可以做到这一点.
方法1 System.arraycopy():
将指定源数组中的数组从指定位置开始复制到目标数组的指定位置.数组组件的子序列从src引用的源数组复制到dest引用的目标数组.复制的组件数等于length参数.源数组中位置srcPos到srcPos + length-1的组件分别被复制到目标数组的destPos到destPos + length-1的位置.
Object[] originalArray = new Object[5];
Object[] largerArray = new Object[10];
System.arraycopy(originalArray, 0, largerArray, 0, originalArray.length);
Run Code Online (Sandbox Code Playgroud)
方法2 Arrays.copyOf():
复制指定的数组,使用空值截断或填充(如有必要),以使副本具有指定的长度.对于在原始数组和副本中都有效的所有索引,这两个数组将包含相同的值.对于在副本中有效但不在原始副本中的任何索引,副本将包含null.当且仅当指定的长度大于原始数组的长度时,这些索引才会存在.生成的数组与原始数组完全相同.
Object[] originalArray = new Object[5];
Object[] largerArray = Arrays.copyOf(originalArray, 10);
Run Code Online (Sandbox Code Playgroud)
请注意,此方法通常System.arraycopy() 在幕后使用.
方法3 ArrayList:
List接口的可调整大小的数组实现.实现所有可选列表操作,并允许所有元素,包括null.除了实现List接口之外,此类还提供了一些方法来操作内部用于存储列表的数组的大小.(这个类大致相当于Vector,除了它是不同步的.)
ArrayList的功能与数组类似,只是当您添加的元素多于它可以包含的元素时,它会自动扩展.它由一个数组支持,并使用Arrays.copyOf.
ArrayList<Object> list = new ArrayList<>();
// This will add the element, resizing the ArrayList if necessary.
list.add(new Object());
Run Code Online (Sandbox Code Playgroud)