如何在Java中表示一个二维矩阵?

11

我需要在Java中创建一个由双精度数值组成的2D矩阵和一个1D向量。应该可以访问单个行和列以及单个元素。此外,它应该是线程安全的(多个线程同时写入)。也许以后我还需要一些矩阵操作。

哪种数据结构最适合这种情况?只用一个2D数组或TreeMap?还是有什么惊人的外部库?


你需要行和列吗?这有点两全其美。当然可以做到,但如果你能避免的话,那会更容易些。 - harold
2
Object[][] matrix = new Object[rowLen][colLen]; 其中rowLen和colLen是需要预先设置的值。当然,您可以将Object更改为String、Integer、Long等。 - Paulo
3个回答

13

我会给你一个例子:

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

您应该使用Vector来表示2D数组。这是线程安全的。

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


谢谢,但我如何轻松访问整个列或行? - machinery
可以通过访问矩阵上的Get方法来获取特定的行。无法直接获取任何特定的列。您必须使用索引来构建它。 - Amber Beriwal
2
你可以做得比这个更好。 - Noor Nawaz

5
如果您需要线程安全的行为,请使用
Vector<Vector<Double>> matrix = new Vector<Vector<Double>>();

如果您不需要线程安全行为,请使用
ArrayList<ArrayList<Double>> matrix = new ArrayList<ArrayList<Double>>();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接