【问题标题】:How to represent a 2D matrix in Java?如何在 Java 中表示二维矩阵?
【发布时间】:2016-05-16 08:50:32
【问题描述】:

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

哪种数据结构最适合这个?只是一个二维数组还是一个 TreeMap?或者有什么神奇的外部库?

【问题讨论】:

  • 您需要两行 列?这有点双向。当然可以,但如果你能避免它会容易得多
  • Object[][] matrix = new Object[rowLen][colLen]; rowLen 和 colLen 是您必须以前设置的值。当然,你可以将Object改为String、Integer、Long等。

标签: java matrix data-structures


【解决方案1】:

我给你举个例子:

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.

清除?

【讨论】:

    【解决方案2】:

    您应该将 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

    【讨论】:

    • 谢谢,但我怎样才能轻松访问整列或整行?
    • 通过矩阵访问Get 方法可以获得特定的行。不能直接获得任何特定的列。您必须使用索引来构建它。
    • 你可以做得比这更好。
    【解决方案3】:

    如果您需要线程安全的行为,请使用

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

    如果您不需要线程安全行为,请使用

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

    【讨论】: