"C:\Program Files\Java\jdk1.8.0_151\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2018.1.4\lib\idea_rt.jar=2680:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2018.1.4\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_151\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\ext\access-bridge.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_151\jre\lib\rt.jar;C:\Users\hp\Downloads\JavaRushTasks\out\production\1.JavaSyntax" com.javarush.task.task08.task0816.Solution
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextNode(HashMap.java:1442)
at java.util.HashMap$EntryIterator.next(HashMap.java:1476)
at java.util.HashMap$EntryIterator.next(HashMap.java:1474)
at com.javarush.task.task08.task0816.Solution.main(Solution.java:59)
Process finished with exit code 1
jaroslav
25 уровень
Уже не в первой задаче в этой лекции выскакивает вот такой код ошибки. Уже 3 день мучаюсь, не могу решать задачи на эту тему. Помогите пожалуйста.
Архивный
Комментарии (19)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
jaroslav
4 июля 2018, 13:12
Может у меня чтото с Идеа что то не так. Переустановить, или ищо что.
0
jaroslav
4 июля 2018, 13:05
Ну например у меня вот такая задача, с таким то кодом:
package com.javarush.task.task08.task0817;
import java.util.HashMap;
import java.util.Map;
/*
Нам повторы не нужны
*/
public class Solution {
public static HashMap<String, String> createMap() {
HashMap<String, String> map = new HashMap<>();
//напишите тут ваш код
return map;
}
public static void removeTheFirstNameDuplicates(Map<String, String> map) {
//напишите тут ваш код
}
public static void removeItemFromMapByValue(Map<String, String> map, String value) {
HashMap<String, String> copy = new HashMap<String, String>(map);
for (Map.Entry<String, String> pair : copy.entrySet()) {
if (pair.getValue().equals(value))
map.remove(pair.getKey());
}
}
public static void main(String[] args) {
}
}
0
Alex MExpert
4 июля 2018, 12:45
это ты наверное .remove из просматриваемой коллекции пытаешься делать
0
jaroslav
4 июля 2018, 13:28
а что нельзя так делать? А как долно быть?
0
Alex MExpert
4 июля 2018, 13:42
тут вроде норм все, с копией работаешь..
0
jaroslav
4 июля 2018, 14:23
Возможно ли, что я сам клас HashMap как то испортил?
0
Alex MExpert
4 июля 2018, 14:31
всяко, конечно, бывает..
Попробуй что ни будь простенькое с коллекциями поделать. Из примеров лекций. И посмотри что получится..
0
jaroslav
4 июля 2018, 14:44
Только что попробовал сделать все в мейне, но без .remove, ошибки нету. а только запустил с .remove, сразу ошибка выскочила.
0
Alex MExpert
4 июля 2018, 15:00
ну даже не знаю..
кинь весь код, с самой первой строки. попробую у себя запустить. Лучше в личку, наверное.
0
Артем Divertitto Senior Android-разработчи в United Tech Master
5 июля 2018, 12:46
Прикрепи задачу, нужно посмотреть
0
jaroslav
5 июля 2018, 13:04
Не могу прекрипить, так как уже решил. Но всеравно спасибо.
Одно только не ясно мне осталось, почему здесь ремув можно использовать:
HashMap copy = new HashMap<>(map);
for (HashMap.Entry s: copy.entrySet()) {
String value = s.getValue();
if(name.equals(value)){
map.remove(s.getKey());
}
}
А вот так нельзя:
for (HashMap.Entry s: map.entrySet()) {
String key = s.getKey();
String value = s.getValue();
if(name.equals(value)){
map.remove(s.getKey());
}
}
0
Артем Divertitto Senior Android-разработчи в United Tech Master
5 июля 2018, 13:09
А в первом варианте, ты пробегаешь по одной коллекции, а удаляешь элементы с другой.
Во втором варианте если удаляешь элемент из коллекции, порядок элементов в коллекции меняется. Поэтому если ты бежишь по коллекции и в тот же момент удаляешь из нее элементы, то в таком варианте можно получить непредвиденный результат, например NPE. Поэтому лучше удалять через итератор, там все эти моменты предусмотрены.
0
jaroslav
5 июля 2018, 13:21
А разве for (HashMap.Entry s: map.entrySet()) это не вызов итератора?
0
Артем Divertitto Senior Android-разработчи в United Tech Master
5 июля 2018, 13:26
map.entrySet() - возвращает нам Set.
Итератор вызывается вот так map.entrySet().iterator();
0
jaroslav
5 июля 2018, 13:29
Тоисть я должен был написать for (HashMap.Entry s: map.entrySet().iterator()) ?
0
Артем Divertitto Senior Android-разработчи в United Tech Master
5 июля 2018, 13:32
Пройти итератором можно вот так
0
jaroslav
5 июля 2018, 13:36
И в этом цыкле можно будет вставлять .remove?
0
Артем Divertitto Senior Android-разработчи в United Tech Master
5 июля 2018, 13:53
вот так
0
jaroslav
5 июля 2018, 14:02
Большое Спасибо! Очень полезно)) Буду использовать.
0