我想创建一个具有可变行数的矩阵,这些行在运行时填充。行数取决于数据,在程序启动之前是未知的。我试过的是:
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
中的条目。你有更好的想法怎么做吗?
答案 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[][]
)。一旦知道矩阵所需的尺寸,就可以在运行时对其进行初始化。