/ / Видаліть елементи з Hashmap під час ітерації над нею - java, hashmap, паралельна модифікація

Видаліть елементи з Hashmap під час перебору - java, hashmap, concurrentmodification

Ось мій код. У мене є масив відвідуваних елементів. Тому я хочу видалити ці відвідувані елементи з хешмапу, а нижче - код. Це дає мені виняток одночасної модифікації.

private static void removeVisitedNodes(ArrayList<String> arrayList) {
// TODO Auto-generated method stub

Iterator<String> it = arrayList.iterator();
String temp;
while(it.hasNext())
{
temp = it.next();
System.out.println("temp is " + temp);
Iterator<Entry<String, ArrayList<String>>> iter = neighbours_reachability_map.entrySet().iterator();

// iterate through the hashmap to remove elements
while (iter.hasNext()) {
Entry<String, ArrayList<String>> entry = iter.next();
if(entry.getValue().contains(temp)){
//System.out.println("Contains it"  + entry.getValue().toString());
entry.getValue().remove(temp);
}
}

}
}

Я перевірив кілька інших подібних питань, але вони не дуже допомогли. Чи є акуратний спосіб це зробити, не викликаючи винятку? Заздалегідь дякую за вашу допомогу.

Відповіді:

2 для відповіді № 1

Щоб видалити елемент у середині ітерації, використовуйте Iterator.remove().


1 для відповіді № 2

ви можете помістити елементи, які потрібно видалити, в інший об’єкт колекції, а потім, після закінчення ітерації, видалити ці елементи