我想创建一个可扩展的数组。每当您尝试将另一个元素添加到当前数组中并且它已满时,它应该将当前数组中的每个元素复制到新数组中(包括您要添加的新元素),然后删除旧数组。谁能给我一些关于如何做到这一点的指示?
编辑: 注意:我不能为此使用数组列表
我想创建一个可扩展的数组。每当您尝试将另一个元素添加到当前数组中并且它已满时,它应该将当前数组中的每个元素复制到新数组中(包括您要添加的新元素),然后删除旧数组。谁能给我一些关于如何做到这一点的指示?
编辑: 注意:我不能为此使用数组列表
如果您不能使用 ArrayList,那么您将不得不编写自己的类,该类基本上与 ArrayList 做同样的事情。
您的类将需要保存对数组的引用,以及一个表示已放入多少值的整数(因为它可能小于数组的当前大小)。
当一个元素被添加到数组中时,检查该整数与数组的当前大小。如果它小于数组的大小,则意味着还有空间容纳另一个元素,所以只需将新值放入数组中,使用整数作为索引,然后在整数上加一。如果整数等于或大于数组的大小,则意味着您需要一个更大的数组,您必须编写代码来创建一个新数组并将所有值复制到其中。
当您创建一个更大的数组时,您可能希望使其足够大以容纳多个附加值,这样您就不必在每次添加新元素时都创建新数组(并复制大量值) . 一种常见的技术是使新数组大小为旧数组的某个百分比,例如 150%。
此代码未经测试,但它应该为您提供一个起点,让您了解应该做什么。我只在 Integer 上实现,但我相信你可以进一步扩展它。
public class ExtendableArray {
private Integer[] arr;
public ExtendableArray(int capacity) {
arr = new Integer[capacity];
}
public void add(Integer item) {
if (getLastIndex() == arr.length) {
generateBiggerArray();
return;
}
for (int i = 0; i < arr.length; i++) {
if (arr[i] == null) {
arr[i] = item;
break;
}
}
}
private void generateBiggerArray() {
int currentCapacity = arr.length;
Integer[] tempArr = new Integer[currentCapacity + 4];
for(int i = 0; i < arr.length; i++) {
tempArr[i] = arr[i];
}
this.arr = tempArr;
}
private int getLastIndex() {
for (int i = 0; i < arr.length; i++) {
if (arr[i] == null)
return i;
}
return arr.length;
}
}
顺便说一句-此代码中有很多地方可以改进(效率等)。我鼓励您尝试。这是一个很好的练习:)
使用 ArrayList检查 javadoc,我认为这是你要找的
我建议您查看 ArrayList 类的源代码。
正如其他人建议的那样,尽可能使用 ArrayList。但是如果由于某种原因你不能(我猜是作业?),那么看看System.arraycopy来有效地复制数组。