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源代码,因为这正是您所需要的(尽管它不会在每次添加时复制数组),并根据它编写您自己的版本。