Как поместить строку символов в HashMap перед сохранением их в массиве?

Входные данные, которые получает моя программа, представляют собой несколько строк символов, которые представляют строки в матрице. Я хотел бы поместить столбцы этой матрицы в LinkedHashMap, но без предварительного сохранения всего в массиве, а затем создать столбцы и поместить их в LinkedHashMap. Идея в том, что это должно быть сделано как можно быстрее.

Пример:

Входные данные:

abfad

grgaa

rtwag

Строки, которые должны быть сохранены в LinkedHashMap:

СМА

БРТ

FGW

ааа

даг

Редактировать:

Вот как моя программа делает это прямо сейчас:

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 ответ

Решение

Я не уверен, почему это понижено.

Это интересная проблема, которую вы, возможно, должны задать немного лучше.

Помогает ли это, если вы думаете об этом как о преобразовании матрицы в реальном времени? Что должно произойти, когда вы читаете первую строку? Что должно произойти для каждой последующей строки? Мы предполагаем, что все строки имеют одинаковую длину, в противном случае нам нужно будет указать, что происходит, когда их нет.

После того, как вы попробовали самостоятельно, возможно, вы можете взглянуть ниже. Я не пользовалась 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]

согласно вашей спецификации.

Другие вопросы по тегам