for (int i = 0; i < list.size(); i++){
Integer value = map.get(list.get(i));
map.put(list.get(i),value == null ? 1 : value + 1);
}
Наткнулся на одно решение данной задачи. Немного изменив код, задача была решена. Однако у самого встал очень интересный вопрос. В коде выше мы присваиваем value значение мапа по индексу. Вот только...в мапе то неизвестно какие значения. Не было инициализации и прочего. Обьясните, пожалуйста hidden #2039138
35 уровень
Вопрос по поводу кода
Решен
Комментарии (3)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Александр
24 апреля 2019, 06:20решение
Массив list содержит все значения байт в порядке их получения из файла. Данный цикл является неким подобием счетчика повторений, с реализацией через мапу, где ключ (key) - это значения байт полученных из list, а значение (value) - счетчик повторений, заносимых из list`a key. Переменная value на каждой итерации цикла проверяет имеется ли очередное значение байт в атрибутах key мапы и ей присваивается значение null, в случае отсутствия в key, или значение (value) мапы, соответствующее текущему key. Далее в мапу элемент добавляется с текущим значением key, если его не было и значением атрибута value равным 1, или заменяется с текущим же значением key, но со значением valuе (счетчиком) = value + 1.
Таким образом из списка последовательных значений байт получается мапа со значениями байт на месте ключа и количеством их повторений на месте значений value.
+2
hidden #2039138
25 апреля 2019, 05:46
А почему когда ставится условие value == null ? 1 : value + 1; при типе Integer, а не int?
0
Vadim
24 апреля 2019, 06:02
Если map не инициализировано, тогда map.get(list.get(i)) вернет null.
В третьей строке как раз идет проверка на null.
0