web-dev-qa-db-ja.com

Javaで2Dマトリックスを表す方法は?

Java 2Dマトリックス(double値からなる))と1Dベクトルを作成する必要があります。個々の行と列、および個々の要素にアクセスできるはずです。さらに、スレッドセーフ(スレッドが同時に書き込み)である必要があります。おそらく、後でマトリックス演算も必要になります。

これに最適なデータ構造はどれですか? 2D配列またはツリーマップだけですか?それとも素晴らしい外部ライブラリはありますか?

7
machinery

2D配列にはベクターを使用する必要があります。これはthreadsafeです。

Vector<Vector<Double>>  matrix= new Vector<Vector<Double>>();

    for(int i=0;i<2;i++){
        Vector<Double> r=new Vector<>();
        for(int j=0;j<2;j++){
            r.add(Math.random());
        }
        matrix.add(r);
    }
    for(int i=0;i<2;i++){
        Vector<Double> r=matrix.get(i);
        for(int j=0;j<2;j++){
            System.out.print(r.get(j));
        }
        System.out.println();
    }

これがマトリックスインデックスの場合

00 01

10 11

あなたはこのような特定のインデックス値を得ることができます

Double r2c1=matrix.get(1).get(0); //2nd row 1st column

Vector をご覧ください

8
Noor Nawaz

例を挙げましょう。

int rowLen = 10, colLen = 20;   
Integer[][] matrix = new Integer[rowLen][colLen];
for(int i = 0; i < rowLen; i++)
    for(int j = 0; j < colLen; j++)
        matrix[i][j] = 2*(i + j); // only an example of how to access it. you can do here whatever you want.

晴れ?

10
Paulo

スレッドセーフな動作が必要な場合は、

Vector<Vector<Double>> matrix = new Vector<Vector<Double>>();

スレッドセーフな動作が必要ない場合は、

ArrayList<ArrayList<Double>> matrix = new ArrayList<ArrayList<Double>>();
2
Aniket Rangrej