Java动态矩阵结构

标签 java matrix data-structures

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

double[][] matrix 这样的东西在删除列/行时看起来很重。

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

link提供了一点帮助,但我确信有一个设计模式,或者至少是一个很好的方法。

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

最佳答案

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

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));
    }        
}

关于Java动态矩阵结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27056799/

相关文章:

使用 lambdas/方法引用的 java 8 事件监听器/调度程序 - 如何实现某些事情?

java - 正则表达式在分隔符字符之间添加数字(如果丢失)

java - 使用javafx中的文件对话框保存矩形的背景图像

algorithm - 我们想找到数组中 n 个元素中最小的、第三小的、第五小的和第七小的

java - 最大化和最小化 JInternalFrame

c - printf() 打印整个字符矩阵

python - 大矩阵中的簇数

java - Java中的SQL CREATE和SELECT处理模拟

algorithm - 关联矩阵而不是邻接矩阵

java - 在java上创建各种矩阵