JAVAで2 D配列を動的に作成するためのテクニックについて

1616 ワード

とても簡単な問題のように見えますが、実際には時間がかかりました.
私の目的は、str[]>;//ここでTが指すint(Integer)タイプ
まずJAVAで2次元配列を作成する方法は2つにほかならない.
1つは静的である.すなわち、すべてのデータが既知である.例えば、3乗3の2次元配列を確立するには、各配列の個数、および配列中の要素が何であるかが明確に知られている.注意すると、両者が既知であってこそ、静的に値を割り当てることができる.例えばint a[]={1,2,6},{3,4,5,6},{7,8,9}}である. 
静的付与は比較的簡単で、実際にはあまり使われていません.ここでは異なるタイプの変換の問題が多いため、多くの情報は既知のタイプのデータに存在します.2次元配列に変換するには、元のタイプの情報に従って2次元配列を動的に再構築する必要があります.そのため、新しい2次元配列は各配列の要素の個数が不確定になる可能性があります.動的に決定する必要があります.
動的付与は、直接2つのタイプが等しい以外に、ほとんどが2層のサイクルを通じて、1つずつ付与されているため、2つに分けられます.そこで問題が発生し、必要な2次元配列の要求が「高くない」場合、int[][]=new int[3][3];に格納し、逆にエラーが発生します.
上記の「要求」の高低は,各配列の長さを確定しない場合に,変数a[]がクラスの成績であるかのように大きな空間で直接保存することであり,int a[100]で直接保存できるように,結果は100のうち30個しか使用できないが,保存または出力のタスクも完了する可能性がある.
では、要求が「高」であれば、結果として2次元配列は格納されたタスクを完了するだけでなく、各配列の長さを保証し、元の情報と一致することを意味します.本題に戻ってstr[]>>を完成させるにはstr[1000][1000]で簡単に保存するのは問題ありませんが、2次元配列ではArrayListの各「小さなチェーンテーブル」の長さという重要な情報が失われています.その結果1つ目は空間の浪費であり,2つ目はこの2次元配列が再利用できないことであり,出力のタスクを制限することで達成できる可能性があるが,再帰ネストなど各配列長に明確な要求がある場合にstr[1000][1000]は全く役に立たない.
実際には、2次元配列の各次元が動的に作成されることが重要です.この点は重要です.動的1次元の方法:int[][]a=new a[第1次元数][];
その後、上の次元が作成された後も、int a[i]=new a[2次元数];
たとえば、2回のループでは、次のように操作できます.
          int [ ][ ] arr ;
          arr = new int [     ][ ];    //       
          for ( i = 0 ; i <     ; i++ ) {
                arr [ i ] = new int [     ];    //       
                for( j=0 ; j <     ; j++) {
                      arr [ i ][ j ] = j; 
                }
           }

上から割り当てが完了すると、各配列の個数が異なる可能性があります.すなわち、str[][]に割り当てられたArraylistの作業が完了します.