Добрый вечер!
public class Solution {
public static Map<String, String> createMap() {
Map<String, String> map = new HashMap<>();
map.put("1", "A");
map.put("2", "B");
map.put("3", "C");
map.put("4", "D");
map.put("5", "E");
map.put("6", "A");
map.put("7", "W");
map.put("8", "Z");
map.put("9", "Q");
map.put("10", "R");
return map;
}
public static void removeTheFirstNameDuplicates(Map<String, String> map) {
HashMap<String, String> copy = new HashMap<String, String>(map);
Iterator<Map.Entry<String, String>> iterator = copy.entrySet().iterator();
while (iterator.hasNext()) {
int count = 0;
Map.Entry<String, String> pair = iterator.next();
String value = pair.getValue();
for (Map.Entry<String, String> pair1 : copy.entrySet()) {
if (pair1.getValue().equals(value)) {
count +=1;
if (count > 1) {
removeItemFromMapByValue(map, value);
}
}
}
}
}
public static void removeItemFromMapByValue(Map<String, String> map, String value) {
Map<String, String> copy = new HashMap<>(map);
for (Map.Entry<String, String> pair : copy.entrySet()) {
if (pair.getValue().equals(value)) {
map.remove(pair.getKey());
}
}
}
public static void main(String[] args) {
//removeTheFirstNameDuplicates(createMap());
}
} //System.out.println(value + " " + pair.getKey());
-----------------------------------------------------------------------------------------------------
У меня вопрос по методу removeTheFirstNameDuplicates, не очень понял.
Так вот какой вопрос, а что у нас по итогу остается в мапе? 0? Просто ведь по логике метода мы заносим в переменную String value элементы get.Value(), дальше в этой же итерации у нас проверяется pair1.getValue().equals(value), где pair1.getValue() и value указывают на одно и тоже слово. Получается у нас метод сравнивает в каждой итерации постоянно одинаковые слова и удаляет мапу под 0.
Я правильно понял? Если нет, прошу очень объяснить как работает метод, в таком случае.
HellScream
20 уровень
Под ноль?
Решен
Комментарии (8)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
IceBergMaster
12 ноября 2019, 19:32
Нет, он один раз сравнивает одинаковые значения, а дальше уже ищет повторы увеличивая count.
Это чужое решение?
0
HellScream
13 ноября 2019, 17:01
Да, чужое, но хочется разобраться в логике метода.
Вот даже сейчас не особо прояснилось. Во время каждой итерации у нас будет происходить действие String value = pair.getValue();
и во вложенном цикле if (pair1.getValue().equals(value)).
Например, при первой итерации String value у нас принял значение "A",в этой же итерации во вложенном цикле for - pair1.getValue(); указывает тоже на значение "А", после чего значение удаляется, и так с каждым по очереди. Или я не правильно понял логику? если да, то, пожалуйста, объясните.
Спасибо!
0
IceBergMaster
13 ноября 2019, 18:22
Не удаляется, почему ты игнорируешь строки которые идут дальше?
count увеличивается на единицу, условие if (1 > 1) выполняется? - нет, значит ничего не удаляется, а вот если будут ещё повторы и count станет 2, тогда да, удаляем.
0
HellScream
13 ноября 2019, 18:48
А, то есть выходит, что count у нас 1 и ничего не удаляется, а при следующей итерации count снова принимает значение 0? после чего итерация повторяется таким же результатом?
0
IceBergMaster
13 ноября 2019, 19:02полезный
Если ты про внешний цикл - то да, новое слово - новый count.
+1
HellScream
15 ноября 2019, 16:14
Да, про внешний.
А тогда еще один небольшой вопрос: Получается итератор просто прогоняет цикл по каждому значению отдельно и у него счетчики обнуляются, а не суммируются при каждой итерации, как в цикле for?
0
IceBergMaster
15 ноября 2019, 16:21решение
count это просто переменная, она не имеет никакого отношения к итератору.
Здесь итератор можно смело заменить на ещё один цикл for-each, разницы никакой, особенности итератора здесь всё равно не используются(метод remove() например).
+2
HellScream
15 ноября 2019, 17:47
Огромное спасибо!
Очень помогли разобрать момент)
0