web-dev-qa-db-fra.com

Comment représenter une matrice 2D en Java?

Je dois créer en Java une matrice 2D (composée de valeurs doubles) ainsi qu'un vecteur 1D. Il devrait être possible d'accéder à des lignes et des colonnes individuelles ainsi qu'à des éléments individuels. De plus, il devrait être thread-safe (les threads écrivant en même temps). Peut-être que plus tard, j'ai aussi besoin d'opérations sur la matrice.

Quelle structure de données est la meilleure pour cela? Juste un tableau 2D ou une TreeMap? Ou y a-t-il une bibliothèque externe incroyable?

4
machinery

Vous devez utiliser Vector pour un tableau 2D. C'est 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();
    }

S'il s'agit de vos index matriciels

00 01

10 11

Vous pouvez obtenir une valeur d'index spécifique comme ceci

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

Regardez Vecteur

6
Noor Nawaz

Je vais vous donner un exemple:

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.

Clair?

6
Paulo

Si vous avez besoin d’un comportement thread-safe, utilisez

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

Si vous n'avez pas besoin d'un comportement thread-safe, utilisez

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