web-dev-qa-db-ja.com

Javaで動的な2次元配列を作成する方法は?

2次元配列を動的に作成したい。

列の数を知っています。ただし、行数は動的に変更されています。配列リストを試しましたが、値は1次元のみに保存されます。私に何ができる?

33
Arivu2020

列の数は定数なので、Listint[]

    import Java.util.*;
    //...

    List<int[]> rowList = new ArrayList<int[]>();

    rowList.add(new int[] { 1, 2, 3 });
    rowList.add(new int[] { 4, 5, 6 });
    rowList.add(new int[] { 7, 8 });

    for (int[] row : rowList) {
        System.out.println("Row = " + Arrays.toString(row));
    } // prints:
      // Row = [1, 2, 3]
      // Row = [4, 5, 6]
      // Row = [7, 8]

    System.out.println(rowList.get(1)[1]); // prints "5"

Listによってサポートされているため、行の数は動的に増減できます。各行は、int[]、これは静的ですが、列の数は固定されていると言ったので、これは問題ではありません。

37

Javaには多次元配列はありませんが、配列の配列があります。

必要な大きさの配列を作成するだけで、要素ごとに、必要な大きさの別の配列を作成できます。

int array[][];

array = new int[10][];

array[0] = new int[9];
array[1] = new int[8];
array[2] = new int[7];
array[3] = new int[6];
array[4] = new int[5];
array[5] = new int[4];
array[6] = new int[3];
array[7] = new int[2];
array[8] = new int[1];
array[9] = new int[0];

代わりに:

List<Integer>[] array;

array = new List<Integer>[10];

// of you can do "new ArrayList<Integer>(the desired size);" for all of the following
array[0] = new ArrayList<Integer>();
array[1] = new ArrayList<Integer>();
array[2] = new ArrayList<Integer>();
array[3] = new ArrayList<Integer>();
array[4] = new ArrayList<Integer>();
array[5] = new ArrayList<Integer>();
array[6] = new ArrayList<Integer>();
array[7] = new ArrayList<Integer>();
array[8] = new ArrayList<Integer>();
array[9] = new ArrayList<Integer>();
16
TofuBeer

2次元文字列配列のもう1つの例:

public void arrayExam() {
    List<String[]> A = new ArrayList<String[]>();
    A.add(new String[] {"Jack","good"});
    A.add(new String[] {"Mary","better"});
    A.add(new String[] {"Kate","best"});
    for (String[] row : A) {
        Log.i(TAG,row[0] + "->" + row[1]);
    }
}

出力:

17467 08-02 19:24:40.518  8456  8456 I MyExam  : Jack->good
17468 08-02 19:24:40.518  8456  8456 I MyExam  : Mary->better
17469 08-02 19:24:40.518  8456  8456 I MyExam  : Kate->best
2
beetlej

Treemap < Integer, Treemap<Integer, obj> >

Javaでは、ツリーマップはソートされたマップです。そして、行と列のアイテムの数は、設定したい2D-indexを台無しにします。次に、構造のような列列テーブルを取得できます。

1
Wonson

配列を含むカスタムクラスを作成し、カスタムクラスの配列を使用する方法について。

1
KMån

以下に簡単な例を示します。このメソッドは、2次元のtType配列を返します

public tType[][] allocate(Class<tType> c,int row,int column){
        tType [][] matrix = (tType[][]) Array.newInstance(c,row);
        for (int i = 0; i < column; i++) {
            matrix[i] = (tType[]) Array.newInstance(c,column);
        }
        return matrix;

    }

あなたは2次元の文字列配列が欲しいと言ってから、この関数を

String [][] stringArray = allocate(String.class,3,3);

これにより、3行3列の2次元の文字列配列が得られます。 Class<tType> c-> cは、たとえばintまたはcharまたはdoubleのようなプリミティブ型にすることはできません。 StringまたはDoubleまたはIntegerなどの非プリミティブでなければなりません。

1
shahnoor rahman
Scanner sc=new Scanner(System.in) ;
int p[][] = new int[n][] ;
for(int i=0 ; i<n ; i++)
{
    int m = sc.nextInt() ;      //Taking input from user in Java.
    p[i]=new int[m] ;       //Allocating memory block of 'm' int size block.

    for(int j=0 ; j<m ; j++)
    {
         p[i][j]=sc.nextInt();   //Initializing 2D array block.
    }
 }
0
Ankit Jaiswal