java - 在Java中表示可变长度矩阵(二维数组)的最佳方式?

标签 java matrix multidimensional-array arraylist hashmap

我想创建一个行数可变的矩阵,该矩阵在运行时填充。行数取决于数据,并且在程序启动之前是未知的。我尝试的是这样的:

    ArrayList<HashMap<Integer, Double>> eMatrix = new ArrayList<HashMap<Integer, Double>>();
    HashMap<Integer, Double> row = new HashMap<Integer, Double>();
    while (i < foo.size() - 1) {
        if (foo.get(i) == 0) {
            row.put(0, foo.get(i));
        }
        if (foo.get(i) == 1) {
            ro.put(1, foo.get(i));
        }
        if (foo.get(i) == 2) {
            ro.put(2, foo.get(i));
        }
        if (!row.isEmpty()) {
            eMatrix.add(row);
        }
        row.clear();
        i++;
    }

这个想法是,由于 ArrayList 和 HashMap 可以具有可变大小,以便使用 HashMap 创建行,并将这些行添加到 ArrayList 中,从而形成一个矩阵。现在的问题是 row.clear 也清除了 eMatrix 中的条目。您有更好的想法吗?

最佳答案

您的具体实现问题可以通过为矩阵的每一行创建一个新的 HashMap 实例来解决:

ArrayList<HashMap<Integer, Double>> eMatrix = new ArrayList<HashMap<Integer, Double>>();
while (i < foo.size() - 1) {
    HashMap<Integer, Double> row = new HashMap<Integer, Double>();
    if (foo.get(i) == 0) {
        row.put(0, foo.get(i));
    }
    if (foo.get(i) == 1) {
        ro.put(1, foo.get(i));
    }
    if (foo.get(i) == 2) {
        ro.put(2, foo.get(i));
    }
    if (!row.isEmpty()) {
        eMatrix.add(row);
    }
    i++;
}

也就是说,我仍然会尝试使用简单的二维数组 (double[][])。一旦您知道了矩阵所需的维度,您就可以在运行时对其进行初始化。

关于java - 在Java中表示可变长度矩阵(二维数组)的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33890641/

相关文章:

java - 如何使用 Hibernate 获取最后插入的 ID

python - 在Python中从列表中找到最佳组合后如何从数据集中删除一行

c - 二维阵列矩阵无法正确打印

python - 将包含矩阵对角线以下元素的列表转换为完整矩阵

python - 在 Pandas 数据框中添加可变长度列 Python

java - 无法在 Spring Boot 中加载 View

java - 使用缓冲读取器和套接字

java - tomcat管理器本地获取错误

c++ - 内存和处理高效的多维数据结构C++

java - 将字符串匹配为二维整数数组的正则表达式