web-dev-qa-db-ja.com

名前を変更せずにJavaで配列を拡張する方法

Javaで配列を拡張することは可能かと思いますが、この配列に複数のメソッドがリンクされているため、名前を変更せずに。同じ名前で2回新しい配列を作成することを考えていました。同じ大きさで、最初の配列から2番目の配列にすべての要素をコピーします。これは可能ですか?
基本的に、銀行の口座で配列を作成したいのですが、顧客が非常に多くの口座を作成して配列に十分な要素がない場合は、それ自体を拡張する必要があります。
返信ありがとうございます!

11
Kajsa

ArrayList を使用することは、多くの状況でおそらく良いアドバイスですが、プレーンな古い配列を使用することは完全に正当な場合があります。

その場合、配列のサイズを変更する必要がある場合は、 Java.utils.Arrays.copyOf メソッド。ただし、実際には配列のサイズを変更しないことに注意してください。新しい配列を作成し、一般的なアイテムをコピーするだけです。

新しい配列のサイズが古い配列よりも大きい場合、新しいアイテムはデフォルト値に初期化されます(つまり、false for boolean[]null for T[]-詳細については、ドキュメントを参照してください)。次のような関数を使用する必要があります。

myArray = copyOf(myArray, myNewSize); 

ただし、このメソッドは常にnew配列を返すことに注意してください。要求されたサイズが元のサイズと同じであっても。これが望ましくないである場合は、次のように記述する必要があります。

myArray = (myNewSize > myArray.length) ? copyOf(myArray, myNewSize) : myArray;
10
Sylvain Leroux

使用している配列を変更することはできませんが、目的のタイプとサイズで新しい配列を作成し、元の配列から新しく作成した配列にデータをコピーして、元の配列変数に割り当てることができます。

しかし、これを行うべきではありません。

配列の代わりに、Java.util.Listの実装を使用します。 ArrayListは、この場合に適していると思います。

10
khachik

これが私のJavaプログラミングクラスのために書いたメソッドです

private static double[] extendArraySize(double [] array){
    double [] temp = array.clone();
    array = new double[array.length + 1];
    System.arraycopy(temp, 0, array, 0, temp.length);
    return array;
}

それがどのように機能するかについてはかなり自明ですが、使用方法では、引数として渡される配列名を使用してメソッドに配列が割り当てられている必要があり、メソッドのデータ型は常に渡される配列の型である必要があります。

例:

double [] z = {1,2,3};  //size of z = 3; [0,1,2]   VALUES: [1,2,3]
z = extendArraySize(z); //size of z = 4; [0,1,2,3] VALUES: [1,2,3,0];

それがひどく説明されていて、それを行うより良い方法があると確信している場合は申し訳ありませんVIAベクトルまたはArrayLists。しかし、プリミティブ配列を拡張したい場合は、これはしている。

私が助けてくれたらいいのに= D

5
Nick

ArrayList を使用すると、すべてが自動的に行われます。 add()またはaddAll()を呼び出すだけで追加できます。

3
thejh
public static void extendarrayafterinitialization(int [] x){
        Scanner input =new Scanner(System.in);
        System.out.print("How many values do you need to insert to the Array : ");
        int how=input.nextInt();
        int length=x.length+how;
        int [] all=new int[length];
        int value=0;
        System.out.println(length);
        for(int i=0;i<x.length;i++){
            all[i]=x[i];
            }
            for(int j=x.length;j<length;j++){
                System.out.print("Enter new value : ");
                int index=input.nextInt();
                all[j]=index;
                }
        for(int print : all){
            System.out.println(print);
            }
        }
0
B48max