Задачу я решил по аналогии с собственным решением подобных задач в прошлом:
1)создал динамический массив
2) создал map
2)считал символы из файла
3) записал эти символы в динамический массив
4) а дальше вот такой фрагмент:
for (Integer integer : list1) {
if (map.containsKey(integer)) {
map.put(integer, map.get(integer)+1);
} else map.put(integer, 1);
}
и вот тут я затупил. Почему так? Вроде бы бы с помощью цикла Foreach проверяем, содержит ли наш map элементы списка list1 в качестве ключей. Вопрос: на каком этапе заполняется map?
Код целиком:
public class Solution {
public static void main(String[] args) {
ArrayList<Integer> list1 = new ArrayList<>();
TreeMap<Integer, Integer> map = new TreeMap<>();
if (args.length != 0) {
try {
FileInputStream fis = new FileInputStream(args[0]);
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
while (br.ready()) {
int c = br.read();
list1.add(c);
}
br.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
for (Integer integer : list1) {
if (map.containsKey(integer)) {
map.put(integer, map.get(integer)+1);
} else map.put(integer, 1);
}
for (Map.Entry entry : map.entrySet()) {
int x = (int)entry.getKey();
System.out.println((char)x + " " + entry.getValue());
}
}
}
Евгений
2 уровень
Когда заполняется map?
Решен
Комментарии (3)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Ksenia VolkovaJava Developer в DXCMaster
7 июня 2021, 13:16решение
Вот в этом цикле map и заполняется.
А список-то зачем?
+2
Евгений
7 июня 2021, 13:25
Да, вижу, что можно было проверять сразу на наличие считанного символа, не помещая его предварительно в массив. Лишние движения совершил. Спасибо, что указали!
Все, с map тоже понял. Разгадка в теле else:
else map.put(integer, 1);
При первой итерации мапа пуста, и мы в else добавляем в качестве первого ключа первый символ.
0
Евгений
7 июня 2021, 13:25
Спасибо
0