如何在将HashMap存储到数组中之前将其放入HashMap中?

时间:2017-03-02 12:43:50

标签: java hashmap linkedhashmap

我的程序获得的输入是几个字符串,表示矩阵中的行。我想将此矩阵的列放在LinkedHashMap中,但不首先将所有内容存储在数组中,然后构造列并将它们放在LinkedHashMap中。这个想法是应该尽快完成。

示例:

输入:

  

abfad

     

grgaa

     

rtwag

应该在LinkedHashMap中保存的字符串是:

  

AGR

     

BRT

     

FGW

     

AAA

     

DAG

编辑:

这就是我的程序现在的工作方式:

String[][] array = new String[n][m];
LinkedHashMap<Integer, String> map = new LinkedHashMap<Integer, String>();  
for (int i = 0; i < n; i++) {
        array[i] = br.readLine().split("");
}
for (int i = 0; i < m; i++) {
    String column = "";
    for (int j = 0; j < n; j++) {
        column += array[j][i];
    }
    map.put(i, column);
}

1 个答案:

答案 0 :(得分:1)

我不确定为什么这会被贬低。

这是一个有趣的问题,你或许应该问一下。

如果您将此视为矩阵的实时转换,这会有帮助吗?阅读第一行时会发生什么?每个后续行应该怎么办?我们假设所有行都有相同的长度,否则我们需要指定当它们没有时会发生什么。

在你自己尝试之后,也许你可以看看下面的内容。我没有在那里使用LinkedHashMap,我也使用了可变StringBuilder。但您可以轻松修改它以使用您选择的数据结构。

public class RealTimeTransform {
    public static void main(String[] args) throws IOException {
        Map<Integer, StringBuilder> columns = new HashMap<>();
        readColumnsFromRows(columns, System.in);
        System.out.println(columns.values());
    }

    private static void readColumnsFromRows(Map<Integer, StringBuilder> columns, InputStream in) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
        int rc = 0;
        String row;
        while ((row = reader.readLine()) != null) {
            if (rc == 0) {
                for (int i = 0; i < row.length(); i++) {
                    columns.put(i, new StringBuilder(10).append(row.charAt(i)));
                }
            } else {
                for (int i = 0; i < row.length(); i++) {
                    columns.get(i).append(row.charAt(i));
                }
            }
            rc += 1;
        }
    }
}

打印:

aman
plan
yess
[apy, mle, aas, nns]

根据您的规范。