Как поместить строку символов в 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]
согласно вашей спецификации.