在Java中表示可变长度的Matrix(2D阵列)的最佳方法是什么?

时间:2015-11-24 10:04:32

标签: 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++;
    }

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

1 个答案:

答案 0 :(得分:2)

您可以通过为矩阵的每一行创建一个新的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++;
}

那就是说,我仍然会尝试使用一个简单的2D数组(double[][])。一旦知道矩阵所需的尺寸,就可以在运行时对其进行初始化。