可扩展阵列

时间:2012-10-14 16:02:33

标签: java

我想创建一个可扩展的数组。每当您尝试将另一个元素添加到当前数组中并且它已满时,它应该将当前数组中的每个元素复制到新数组(包括您要添加的新元素),然后删除旧数组。是否有人能够就如何做到这一点给我一些指示?

修改 注意:我不能在这个

中使用arraylists

6 个答案:

答案 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)

您应该使用ArrayList。请参阅此tutorial

如果你不能使用数组列表,那么你需要循环数组并根据你当前数组的长度将每个元素移动到一个更大的数组中。

简单的谷歌搜索应该回答这个问题。

答案 3 :(得分:0)

使用 ArrayList检查javadoc,我认为这就是你要找的东西

答案 4 :(得分:0)

我建议你检查ArrayList类的source code

答案 5 :(得分:0)

正如其他人推荐的那样,尽可能使用ArrayList。但如果你出于某种原因(我猜想做作业?),那么请看看System.arraycopy来有效地复制数组。