必要に応じて次元を増やす動的な多次元配列を作成することは可能であり(そうであると確信しています)、それほど複雑ではありませんか?
// Array[] 1 has 2 dimensions
if(blah=blah)
{
Array[] 1 gets second dimension and is now Array[][]
}
必要に応じて次元を増やす動的な多次元配列を作成することは可能であり(そうであると確信しています)、それほど複雑ではありませんか?
// Array[] 1 has 2 dimensions
if(blah=blah)
{
Array[] 1 gets second dimension and is now Array[][]
}
いいえ、できません。配列の次元数は、配列オブジェクトではなく、配列の型のプロパティであるため、組み込みのJava配列ではこれを行うことはできません。
実行時に次元数を変更できる配列をエミュレートするには、独自のクラスを作成する必要があります。そのクラスは配列または配列に基づくArrayList
ことができますが、1つの制限があります。それは、エミュレートされた配列で添え字演算子を使用できないことです。
「醜い」解決策もあります。型なしで配列を格納できます。基本的に、型なしとして格納できますObject
。次のように、任意の数の次元を持つ配列をタイプの変数に割り当てることができますObject
。
Object a = new int[10];
a = new int[10][2];
a = new int[10][2][5];
問題は、キャストを実行せずにそのような配列の要素にアクセスできないことです。
a[2][1][0] = 7; // Will not compile
これはコンパイルされて機能しますが、構成はかなり読めません。
((int[][][])a)[2][1][0] = 7;
また、アレイのコピーを作成しない限り、アレイの以前のコンテンツは再割り当て時に失われることに注意してください。