我刚刚创建了一个比我以前的数组大一个的新数组,我想将我的第一个数组中的值复制到我的新数组中。如何将新值添加到新数组的最后一个索引?
这是我尝试过的:
public void addTime(double newTime) {
if (numOfTimes == times.length)
increaseSize();
times[numOfTimes] = newTime;
}
为什么不使用 System.arraycopy 函数。
increaseSIze()
{
double [] temp = new double[times.lebgth+1];
System.arrayCopy(times,0,temp,0,times.length);
times=temp;
}
之后,您将拥有大小增加 1 个的 times 数组。
我建议尝试使用对象java.util.List
而不是原始数组。然后你可以这样做:
times.add(newTime)
它会为你处理尺寸。
如果使用数组是一个约束,请考虑Arrays.copyOf :
import java.util.Arrays;
...
private void increaseSize() {
// Allocate new array with an extra trailing element with value 0.0d
this.times = Arrays.copyOf( times, times.length + 1 );
}
...
请注意,如果您经常以不可预知的方式进行这种类型的数组管理,您可能需要考虑Java 集合框架类之一,例如ArrayList。的设计目标之一ArrayList
是管理大小管理,就像 JVM 本身管理内存管理一样。
我在这里开发了一个在线可执行示例。
要将新值设置为最后一个索引,您可以这样做
times[times.length - 1] = newTime;
数组索引从0..n-1
.
array[array.length - 1]
将处理数组末尾的值。
你为什么不想要一个 java.util.ArrayList 来满足这个要求?实际上,不需要管理它的大小。你只需这样做:
List<Double> list = new ArrayList<Double>();
list.add(newTime);
数组的最后一项总是在myArray.length - 1
。在您的情况下,时间数组中的最后一个元素是times[times.length - 1]
. 有关数组的更多信息,请查看http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html。
但更重要的是:如果您尝试更改阵列的容量,您很可能使用了错误的数据结构来完成这项工作。看看 Oracle 的Introduction to Collections
(特别是ArrayList
如果你需要一个类似数组的索引来访问元素的类)。