我想创建一个可扩展的数组。每当您尝试将另一个元素添加到当前数组中并且它已满时,它应该将当前数组中的每个元素复制到新数组(包括您要添加的新元素),然后删除旧数组。是否有人能够就如何做到这一点给我一些指示?
修改 注意:我不能在这个
中使用arraylists答案 0 :(得分:3)
如果你不能使用ArrayList,那么你必须编写自己的类,它基本上和ArrayList做同样的事情。
你的类需要保存一个数组的引用,以及一个整数,它表示已经放入了多少个值(因为它可能小于数组的当前大小)。
将一个元素添加到数组中时,请根据数组的当前大小检查该整数。如果它小于数组的大小,则意味着有另一个元素的空间,所以只需使用整数作为索引将新值放入数组中,然后将1添加到整数。如果整数等于或大于数组的大小,则意味着您需要一个更大的数组,并且您必须编写代码来创建一个新数组并将所有值复制到它。 / p>
当你创建一个更大的数组时,你可能希望它足够大以容纳多个附加值,这样你就不必创建新数组(并复制大量值) 每隔时间添加一个新元素。一种常见的技术是使新数组大小与旧数组相比有一定比例,如150%。
答案 1 :(得分:1)
此代码未经过测试,但它应该为您提供应该做的事情的起点。 我只在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;
}
}
顺便说一下 - 这段代码中有很多地方可以改进(效率等等)。我鼓励你试试。这是一个很好的练习:)
答案 2 :(得分:0)
答案 3 :(得分:0)
使用 ArrayList检查javadoc,我认为这就是你要找的东西
答案 4 :(得分:0)
我建议你检查ArrayList类的source code。
答案 5 :(得分:0)
正如其他人推荐的那样,尽可能使用ArrayList。但如果你出于某种原因(我猜想做作业?),那么请看看System.arraycopy来有效地复制数组。