【问题标题】:Java dynamic matrix structureJava动态矩阵结构
【发布时间】:2014-11-21 08:14:34
【问题描述】:

我想知道在 Java 中实现矩阵的最佳方法,其中必须轻松添加/删除列和行。

double[][] matrix 之类的东西在删除列/行时似乎很重。

我进行了一些搜索,但找不到处理此问题的设计模式(左右)。你有什么建议吗?我不是在寻找图书馆,而是在寻找有关所需内容的更多指南。我在考虑混合使用列表和地图,但我不确定这是最有效的。

这个link 提供了一些帮助,但我确信有一个设计模式可以解决这个问题,或者至少是一个很好的方法。

这里有一些更多的规格:我希望矩阵一般为 300x300 大。我需要做很多操作(我正在做一个更新很多的启发式方法,数百次/秒),因此每次我想更新它时我都无法浏览它。没有最大尺寸,但我不希望它大于 5000x5000。

【问题讨论】:

  • 您的矩阵阵列有多大? 10x10 还是 10000 X 10000?您多久更改一次它的行/列号?有最大矩阵大小吗?
  • 我在我的问题中添加了更多规范,谢谢。
  • 当你添加/删除 cols/rows 时,它总是在最后吗?
  • 不,它可以在任何地方,否则数组实现就可以了。

标签: java matrix data-structures


【解决方案1】:

一个可能的简单解决方案是使用列表列表,例如

int nRows = 8, nCols = 4;
List<List<Double>> matrix = new ArrayList<>(nRows);
for (int k = 0; k < nRows; k++) {
    matrix.add(new ArrayList<>(nCols));
}

在这种情况下,添加/删除一行真的很容易,但添加/删除一列有点棘手。

void removeRow(ArrayList<ArrayList<Double>> matrix, int rowIndexToRemove) {
    matrix.remove(rowIndexToRemove);
}

void removeColumn(ArrayList<ArrayList<Double>> matrix, int coulmnIndexToRemove) {
    for (ArrayList<Double> row : matrix) {
        row.remove(coulmnIndexToRemove);
    }
}

void addRow(ArrayList<ArrayList<Double>> matrix, int rowIndexWhereInsert, ArrayList<Double> newRow) {
    matrix.add(rowIndexWhereInsert, newRow);
}

void addColumn(ArrayList<ArrayList<Double>> matrix, int columnIndexWhereInsert, ArrayList<Double> newColumn) {
    for (int k = 0; k < matrix.size(); k++) {
        ArrayList<Double> row = matrix.get(k);
        row.add(columnIndexWhereInsert, newColumn.get(k));
    }        
}

【讨论】:

  • 感谢您的回答。我也想过,但这里不适合。也许我需要更准确:我需要对两者都进行同样的轻松访问。每次我想更新矩阵时,我都不允许浏览它。
【解决方案2】:

我建议你为此创建自己的类,类似于这个

class Matrix{
int rows
int cols
List<MatrixElement> elements;
//some methods like getCols(), getRows()
}

class MatrixElement{
int row
int col
double value
//some methods like boolean isNeighbourOf(MatrixElement other) etc whatever you need

}

这样的事情很容易实现,并为您提供使用时所需的所有灵活性

【讨论】:

    【解决方案3】:

    看看这个实现here。看起来像您要找的东西。

    【讨论】:

    • 非常有趣的链接,谢谢。我可能会去。不过,我还没有将我的问题标记为已回答,因为我真的很想知道是否有任何好的做法。正如我所提到的,我有兴趣解决我的问题,但我对理论/抽象答案同样感兴趣:矩阵易于更新所需的最小值。
    猜你喜欢
    • 1970-01-01
    • 2018-05-17
    • 2021-03-03
    • 2011-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    • 2011-06-11
    相关资源
    最近更新 更多