【问题标题】:Best way to represent a Matrix (2D-Array) of variable length in Java?在Java中表示可变长度矩阵(二维数组)的最佳方法?
【发布时间】:2016-02-26 17:11:17
【问题描述】:

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

    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 中的条目。你有更好的想法吗?

【问题讨论】:

    标签: java matrix multidimensional-array arraylist hashmap


    【解决方案1】:

    您的具体实现问题可以通过为矩阵的每一行创建一个新的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[][])。一旦知道矩阵所需的维度,就可以在运行时对其进行初始化。

    【讨论】:

    • ArrayList&lt;Double[]&gt; resp。 ArrayList>`.
    • @neza 性能和更好的可读性。当我看到new ArrayList&lt;HashMap&lt;Integer, Double&gt;&gt;() 时,与new double[numRows][numCols] 相比,意识到这是一个矩阵表示并不容易。除此之外,HashMap 没有排序,因此如果您想按顺序遍历某行的列,则需要其他一些 Map 实现。
    猜你喜欢
    • 2013-02-06
    • 2014-08-08
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多