Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
1 / 1 / 0
Регистрация: 20.10.2016
Сообщений: 12
Записей в блоге: 3
1

Коллекции, ошибка Exception in thread "main" java.util.ConcurrentModificationException

12.07.2017, 00:23. Показов 3657. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть задача удалить из хэшмэп элементы с интом меньше 500
непонимаю почему без хэшмэп "copy" не пашет?

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class Solution {
    public static HashMap<String, Integer> createMap() {
        HashMap<String, Integer> vedom = new HashMap<>();
        vedom.put("adsad", 100);
        vedom.put("asdfdsf", 150);
        vedom.put("asd", 569);
        vedom.put("dsad", 124);
        vedom.put("ddfg", 1213);
        vedom.put("dfbr", 1012);
        vedom.put("brer", 600);
        vedom.put("ergbefrv", 400);
        vedom.put("dfvwfb", 500);
        vedom.put("dfgerwfge", 300);
        return vedom;
    }
 
    public static void removeItemFromMap(HashMap<String, Integer> map) {
        HashMap<String, Integer> copy = new HashMap(map);
        for (Map.Entry<String, Integer> pair : copy.entrySet()) {
            if (pair.getValue() < 500) {
                map.remove(pair.getKey());
            }
        }
        System.out.println(map);
    }
 
 
 
    public static void main(String[] args) {
        removeItemFromMap(createMap());
 
    }

если сделать
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public class Solution {
    public static HashMap<String, Integer> createMap() {
        HashMap<String, Integer> vedom = new HashMap<>();
        vedom.put("adsad", 100);
        vedom.put("asdfdsf", 150);
        vedom.put("asd", 569);
        vedom.put("dsad", 124);
        vedom.put("ddfg", 1213);
        vedom.put("dfbr", 1012);
        vedom.put("brer", 600);
        vedom.put("ergbefrv", 400);
        vedom.put("dfvwfb", 500);
        vedom.put("dfgerwfge", 300);
        return vedom;
    }
 
    public static void removeItemFromMap(HashMap<String, Integer> map) {
 
        for (Map.Entry<String, Integer> pair : map.entrySet()) {
            if (pair.getValue() < 500) {
                map.remove(pair.getKey());
            }
        }
        System.out.println(map);
    }
 
 
 
    public static void main(String[] args) {
        removeItemFromMap(createMap());
 
    }
}
то вот что показывает:
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextNode(HashMap.java:1437)
at java.util.HashMap$EntryIterator.next(HashMap.java:1471)
at java.util.HashMap$EntryIterator.next(HashMap.java:1469)
at com.javarush.task.task08.task0818.Solution.removeItemFromMap(Solution.java:28)
at com.javarush.task.task08.task0818.Solution.main(Solution.java:39)

Добавлено через 1 минуту
Я еще учусь, так что просьба не кидаться ничем)
Просто не пойму зачем мы передаем в метод наш список, после чего его копируем и с копией работаем? почему напрямую то нельзя, чего хотит эта дьявольщина)
Спасибо

Добавлено через 36 секунд
Это ведь по идее если работать с большим списком то скушает памяти дофига?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.07.2017, 00:23
Ответы с готовыми решениями:

Exception in thread "main" java.util.InputMismatchException
У меня есть несколько вопросов. Первый: как называется функция, которая получает размер вектора....

Exception in thread "main" java.util.InputMismatchException
Добрый день. Решаю задачу по Java: &quot;Существует массив чисел. Найти количество чисел в массиве,...

Exception in thread "main" java.util.NoSuchElementException
Добрый день! Я получаю при выполнении метода следующий эксепшн Exception in thread &quot;main&quot;...

Ошибка Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at pr4.RSA.main(RSA.java:44)
package pr4; import java.math.BigInteger; import java.security.SecureRandom; public...

2
4 / 4 / 3
Регистрация: 17.11.2015
Сообщений: 57
12.07.2017, 02:36 2
Для этого созданы итераторы, https://docs.oracle.com/javase... rator.html

Добавлено через 4 минуты
Map.entrySet().iterator()
Так как entrySet() возвращает "представление" словаря, можно смело вызывать Iterator.remove(), зная что пара удалится из словаря.

Добавлено через 1 минуту
А так получается что Вы пытаетесь удалить пару при том что со словарем работает (прогоняет) цикл for.
0
1 / 1 / 0
Регистрация: 20.10.2016
Сообщений: 12
Записей в блоге: 3
12.07.2017, 08:40  [ТС] 3
lignium, проблема в том что с англ беда) поэтому покамись на русские источники опираюсь то там то сям. И вот где-то вычитал что в цикле foreach как-то там создается неявный итератор, и я думал что опираясь на него должно все получится. В общем немного непонятно. Ладно на данный момент пусть будет так, надеюсь в будущем это прояснится больше. (как много раз я уже себе так сказал, за это недолгое время что посвящаю изучению )
0
12.07.2017, 08:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.07.2017, 08:40
Помогаю со студенческими работами здесь

Ошибка Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 at program.main(program.java:25)
Всем привет, только начал изучать java, помогите исправить ошибку в заголовке, и если не сложно,...

Ошибка Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
Добрый день! Дабы разобраться с объектами решил написать простую программу для вывода чисел...

Ошибка Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7
Здравствуйте у меня такая проблема: Exception in thread &quot;main&quot;...

Ошибка Exception in thread "main" java.lang.NullPointerException
Добрый день! Программа запускается, но выдает ошибки: MSI GeForce GTX 1070 Gaming Z Exception in...

Ошибка: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
Код реализации стека: package Class; class Stack { private int top; private int...

Ошибка: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 9
Задача такая: из файла эксель считываются значения в матрицу, нужно подсчитать среднее...

Ошибка Exception in thread "main" java.lang.NullPointerException
Полный текст консоли: Input a number: Exception in thread &quot;main&quot; java.lang.NullPointerException...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru