在Java中创建可扩展数组

7jmck4yq  于 2023-04-19  发布在  Java
关注(0)|答案(6)|浏览(143)

我想创建一个可扩展的数组。
当你尝试向数组中添加一个元素时,它已经满了:

  • 它应该将当前数组中的每个元素复制到新数组中

(包括要添加的新元素),

  • 那么它应该删除旧数组。

有人能给予我一些关于如何做到这一点的指点吗?

编辑:

注意:我不能使用ArrayList。

cqoc49vn

cqoc49vn1#

如果你不能使用ArrayList,那么你必须编写自己的类,它基本上做与ArrayList相同的事情。
你的类需要保存一个数组的引用,以及一个整数,表示有多少值被放入其中(因为它可能小于数组的当前大小)。
当一个元素被添加到数组中时,根据数组的当前大小检查该整数。如果它小于数组的大小,则意味着有空间容纳另一个元素,因此只需使用整数作为索引将新值放入数组中,然后将整数加1。如果整数等于或大于数组的大小,则意味着需要更大的数组。你需要编写代码来创建一个新数组,并将所有值复制到其中。
当你创建一个更大的数组时,你可能会想让它足够大以容纳多个额外的值,这样你就不必在每次添加新元素时都创建新的数组(并复制大量的值)。一个常见的技术是使新数组的大小是旧数组的某个百分比,比如150%。

7gs2gvoe

7gs2gvoe2#

这段代码没有经过测试,但它应该给予你一个起点,你应该做什么。我只实现了整数,但我相信你可以扩展这甚至更多。

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;
    }
}

顺便说一句,这段代码中有很多地方你可以改进(效率等),我鼓励你去尝试。这是一个很好的练习:)

o2gm4chl

o2gm4chl3#

使用ArrayList检查javadoc,我认为这是你在寻找什么

koaltpgm

koaltpgm4#

我建议你检查ArrayList类的source code

zrfyljdw

zrfyljdw5#

正如其他人建议的那样,如果可能的话,使用ArrayList。但是如果由于某种原因(我猜是家庭作业?)你不能使用ArrayList,那么看看System.arraycopy来有效地复制数组。

jxct1oxe

jxct1oxe6#

你应该使用一个ArrayList。见tutorial
如果你不能使用数组列表,从你的编辑,那么你需要循环数组,并根据当前数组的长度将每个元素移动到一个更大的数组中。
一个简单的谷歌搜索应该回答这个问题。

相关问题