У меня есть структура данных Map<Long,List<POJO>>
. Мне нужно перебирать карту и для каждого списка, мне нужно добавить элементы в список. Так, например, если в списке было 10 элементов, это может закончиться 12. Мой вопрос: будет ли причиной исключения параллельной модификации, если я возьму простой подход к итерации карты и изменю каждый List<POJO>
? Поскольку я не буду явным образом изменять адрес каждого Списка. Я предполагаю, что вопрос является вопросом, будет ли Список изменять свой адрес, если ему нужен более крупный непрерывный блок для хранения своего массива.избежать исключения одновременной модификации с помощью карты <Long, List <POJO>>
ответ
Ответ на оба ваши вопросы «нет»:
Там не будет
ConcurrentModificationException
, если все, что вы делаете, мутирует значения карты, так как вы на самом деле не изменения сами ценности, просто изменяя их состояние. Это достаточно легко проверить и подтвердить.Список не будет «изменять свой адрес», если вы попытаетесь добавить больше элементов, чем может удерживать. Вместо этого больше места будет выделено внутри страны. Например, для
ArrayList
внутренний массив будет заменен новым большим массивом, и элементы будут скопированы.
Ваш второй пункт, похоже, не согласен с @Batty. И я склонен принять ваш ответ, поскольку он неожиданно кажется более разумным. +1. Спасибо за ответ. –
Если вы пытаетесь изменить/добавить к карте во время итерации по ней, произойдет Exception, но в вашем случае вы выполняете итерацию по карте, но добавляете ее во внутреннюю карту списка, поэтому проблем не будет. о втором вопросе, адрес никогда не изменяется, но зависит от реализации, скажем, если это ArrayList, а на добавочном пространстве недоступно в одном месте, тогда создается новый List и элементы копируются, но это не всегда так.
Хорошая точка +1. Благодарю. Вы знаете, как это влияет на более широкий вопрос? –
Это неверно. Адрес списка не изменяется. – arshajii
говорят, что ArrayList с начальным размером говорит 5, как только список заполнен, и появляется 6-й элемент, JVM делает размер List равным 10, а если размер = 10 недоступен в одном месте, то создается новый список и элементы копируются, это это всегда не так. – Batty
Этот список изменит размер и расположение памяти, если это необходимо. ArrayLists создаются с их начальной мощностью, а затем удваиваются после достижения предела. Если нет последовательной памяти, адрес будет изменен на другой непрерывный блок для хранения списка. Однако связанный список не выделяется таким образом. Связанный список выделяет пространство для узла, а следующие ссылки поддерживаются и сохраняются как атрибут объекта, поэтому непрерывная память не нужна.
- 1. Java 8: Фильтрация карты <Long, Person> to list <Long> по статусу человека
- 2. Конвертировать карту <Long, MyObject> в Map <Long, List <MyObject>>
- 3. Java 8 поток Map <Long, Список <MyClass>> на карту <Long, Set <Long>>
- 4. Преобразование карты <Long, Список <Foo>> к списку <Foo>
- 5. Сортировка карты <String, List <Object[]>>
- 6. Java: Сортировка карты, Карта <Long, Карта <String, Data >> на основе внутренней карты
- 7. Не может неявно преобразовать тип «System.Collections.Generic.List <System.Collections.Generic.IEnumerable <long>>» на '<long>
- 8. ObservableCollection <> vs. List <>
- 9. Readonly List <Dictionary<>>
- 10. Обработка одновременной модификации Исключение android
- 11. Java - Список HashMap <Long, Set <String>>
- 12. Вывод карты <String, Map <String, List <String> >> в jsp с помощью jstl
- 13. Исключение одновременной модификации. Как избежать этого сценария?
- 14. Как избежать << - с помощью назначения
- 15. Список <?> list = new ArrayList <String>(); List <? extends Object> list = new ArrayList <String>();
- 16. Копирование кэшированной карты <String, List> object во временную карту <String, List> object
- 17. Карта Карта <Long, List <POJO>> через JPA EclipseLink
- 18. преобразовать список <int> в список <long>
- 19. Застрял с List <>
- 20. Перебор с ++ карты <Int, список <int>>
- 21. Является std :: map <std :: set <long>, double> AND std: map <std :: pair <long, long>, double> допустимый тип данных в C++?
- 22. LCDS - Expect List <Long>, get ArrayCollection Integer
- 23. Тип несоответствия: невозможно преобразовать с карты <String, List <Animal>> в карту <String, List <Dog>>
- 24. переопределение Список <baseClass> с List <DerivedClass>
- 25. Как положить (String, List <MyObject>) в карту <String, List <Object>>
- 26. ANDing two List <Long> Объект в Java
- 27. сортировки List <Map <String, String >>
- 28. Задача <long?> MethodName()
- 29. Синтаксис Linq для установки значений словаря <long, List <string>>
- 30. Я хочу отобразить карту <Long, List <POJO>> через JPA
Я работаю над большой проблемой, и я об этом думаю. Я просто надеялся, что эксперт может помочь мне быстро ответить на этот вопрос. –
Вы получили исключение, пока вы его пробовали? Или вы попробовали? – UDPLover