Java 可扩展阵列
我想创建一个可扩展数组。无论何时尝试将另一个元素添加到当前数组中,并且该数组已满,它都应该将当前数组中的每个元素复制到新数组中(包括要添加的新元素),然后删除旧数组。有人能给我一些关于如何做的建议吗 编辑:Java 可扩展阵列,java,Java,我想创建一个可扩展数组。无论何时尝试将另一个元素添加到当前数组中,并且该数组已满,它都应该将当前数组中的每个元素复制到新数组中(包括要添加的新元素),然后删除旧数组。有人能给我一些关于如何做的建议吗 编辑: 注意:我不能为此使用ArrayList您应该使用ArrayList。看这个 如果无法使用编辑中的数组列表,则需要循环数组,并根据当前数组的长度将每个元素移动到更大的数组中 一个简单的谷歌搜索应该能回答这个问题。使用 检查javadoc,我想这就是您要查找的内容。我建议您检查ArrayList
注意:我不能为此使用ArrayList您应该使用ArrayList。看这个 如果无法使用编辑中的数组列表,则需要循环数组,并根据当前数组的长度将每个元素移动到更大的数组中 一个简单的谷歌搜索应该能回答这个问题。使用
检查javadoc,我想这就是您要查找的内容。我建议您检查ArrayList类的名称。如其他人所建议的,如果可能,请使用ArrayList。但是如果由于某种原因(我想是家庭作业?)不能,那就看看如何有效地复制数组。如果不能使用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;
}
}
公共类ExtendableArray{
私有整数[]arr;
公共扩展数据库(内部容量){
arr=新整数[容量];
}
公共空添加(整数项){
if(getLastIndex()==arr.length){
generateBiggerArray();
返回;
}
对于(int i=0;i
顺便说一句,这段代码中有很多地方可以改进(效率等),我鼓励您尝试一下。这是一个很好的练习:)您可以使用ArrayList。它是可扩展的。是您想要的。为什么不能使用
ArrayList
?如果您不能使用ArrayList(为什么?),那么请查看ArrayList源代码,因为这正是您所需要的(尽管它不会在每次添加时复制数组),并根据它编写您自己的版本。