-2

拡張可能な配列を作成したい。現在の配列に別の要素を追加しようとして、それがいっぱいになると、現在の配列から新しい要素(追加する新しい要素を含む)にすべての要素をコピーしてから、古い配列を削除する必要があります。誰かが私にこれを行う方法についてのいくつかの指針を与えることができるでしょうか?

編集: 注:これには配列リストを使用できません

4

6 に答える 6

3

ArrayList を使用できない場合は、基本的に ArrayList と同じことを行う独自のクラスを作成する必要があります。

クラスは、配列への参照と、それに入れられた値の数を示す整数を保持する必要があります (配列の現在のサイズよりも小さい可能性があるため)。

要素が配列に追加されたら、その整数を配列の現在のサイズと照合します。配列のサイズよりも小さい場合は、別の要素の余地があることを意味するため、整数をインデックスとして使用して新しい値を配列に入れ、整数に 1 を追加します。整数が配列のサイズ以上である場合は、より大きな配列が必要であることを意味し、コードを記述して新しい配列を作成し、すべての値をコピーする必要があります。

より大きな配列を作成するときは、新しい要素を追加するたびに新しい配列を作成 (および多くの値をコピー) する必要がないように、複数の追加の値を保持するのに十分な大きさにしたいと思うでしょう。. 一般的な手法は、新しい配列サイズを古い配列の何パーセントか (150% など) にすることです。

于 2012-10-14T16:12:16.507 に答える
1

This code was not tested but it should give you a starting point on what you should do. I implemented only on Integer but i trust you can extend this even more.

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

BTW - there are many places in this code that you can improve (efficiency etc..) i encourage you to try. This is a good exercise :)

于 2012-10-14T16:18:19.747 に答える
0

ArrayListを使用する必要があります。このチュートリアルを参照してください。

編集から配列リストを使用できない場合は、配列をループし、現在の配列の長さに基づいて各要素をより大きな配列に移動する必要があります。

簡単なグーグル検索はこれに答えるはずです。

于 2012-10-14T16:04:35.103 に答える
0

ArrayListを使用 してjavadocを確認してください。これが、探しているものだと思います。

于 2012-10-14T16:05:35.807 に答える
0

ArrayListクラスのソースコードを確認することをお勧めします。

于 2012-10-14T16:06:13.393 に答える
0

As others recommended, use ArrayList if possible. But if you can't for some reason (I guess homework?), then have a look at System.arraycopy to efficiently copy arrays.

于 2012-10-14T16:10:05.750 に答える