サイズをハードコーディングせずに、別のクラスのクラスのオブジェクトの配列を初期化するにはどうすればよいですか?
9 に答える
リストを使用します。リストの作成時にサイズを宣言する必要はありません。toArray()メソッドは、リストの配列表現を返します。使用できる実装は複数ありますが、最も一般的なのはArrayListです(ただし、実装を特定の状況にマッピングするのが最適です)。
配列は、作成後に固定サイズになります。サイズはコンパイル時に知る必要はありませんが、作成時に知る必要があります。例えば:
public String[] createArray(int size) {
// Not hard-coded, but array is not expandable
return new String[size];
}
時間の経過とともに縮小する可能性のあるコレクションが必要な場合はList<E>
、などのさまざまな実装を確認してくださいArrayList<E>
。
配列の長さは固定されています。コレクションの使用をお勧めします。
コレクションに関する記事は次のとおりです。
http://en.wikipedia.org/wiki/Java_collections_framework
これらを使用すると、Add()コマンドなどを使用して要素を追加できます。
前の回答で述べたように、ArrayListまたはListはコレクションです。
Object[]は常に固定サイズになります。可変長のコレクションが必要な場合は、ArrayList、LinkedList、または他の多くのコレクションの1つを試してください。
コレクションはすべてパフォーマンスの側面が異なるため、慎重に選択してください。
可変配列の場合、他のコンテナオブジェクトが使用されます。
オブジェクトのセットを使用する場合、ArrayListまたはVectorオブジェクトが使用されます。[0]="Ben"の代わりに"Name"="Ben"などのオブジェクトキーを使用してオブジェクトを保存することもできます。
Vector v = new Vector();
for(int i = 0; i < 100; i++){
Object o = new Object();
// init object
v.addElement(o);
}
for(int i = 0; i < 100; i++){
Object o = v.elementAt(i);
// manipulate object
}
これで、長さが定義されていないオブジェクトの任意のリストができました。vector.size()メソッドを使用して検出されたサイズ。
java.utilパッケージが必要であり、J2SE1.3以降の一部です。
他の場所で説明されているように、配列オブジェクトのサイズは固定されています。配列を使用しなければならない理由がある場合は、次のいずれかまたは両方の手法を使用できます。
未使用のエントリをnullのままにして、必要以上に大きくします。「slotsUsed」変数を保持することをお勧めします。
配列が小さくなりすぎたら、大きくして内容をコピーします。
これらは両方ともArrayList内で使用されます。
このように、新しい配列を作成して初期化できます。
String[] strArray = {"Initialize","Array","Like","This"};
動的サイズの配列が必要な場合は、ArrayListを使用することをお勧めします。
オブジェクトの代わりにプリミティブの配列が必要な場合は、Trove4jを使用できます。それ以外の場合は、ArrayListまたはCopyOnWriteArrayListを使用して配列をラップします。他にもListの実装がありますが、これらはアクセス時間の配列のようには機能しません。
アプリケーションに必要なオブジェクトの上限がわかっている場合は、配列のサイズを次のように宣言すると便利な場合があります。
static final int ARRAY_SIZE = 1000;
これはクラスの始めに近いので、簡単に変更できます。メインコードで配列をインスタンス化します
Object[] objects = new Object[ARRAY_SIZE];
また、使用するアレイのサイズが別のアレイと同じ場合は、使用を検討してください
Object[] objects = new Object[other_objects.length];