[ https://issues.apache.org/jira/browse/COLLECTIONS-663?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Christophe Schmaltz updated COLLECTIONS-663: -------------------------------------------- Description: Testcase: {code} @Test public void test() { MultiValuedMap<Integer, Integer> multiMap = new HashSetValuedHashMap<>(); multiMap.put(1, 10); multiMap.put(2, 20); for (Collection<Integer> innerCollection : multiMap.asMap().values()) { for (Iterator<Integer> iterator = innerCollection.iterator(); iterator.hasNext();) { Integer i = iterator.next(); iterator.remove(); // only the innerCollection is altered } } }{code} This test unexpectedly throws a ConcurrentModificationException. The issue is that when calling {{iterator.remove()}} the {{AbstractMultiValuedMap.ValuesIterator}} detects that the Collection is empty and calls {{AbstractMultiValuedMap.this.remove(key);}}. It would be better if the iterator of the inner collection had a reference on the iterator if the outer map and called {{containerIterator.remove()}} instead. In the current state, it is quite unclear why an exception is thrown, without debugging the code. was: Testcase: {code} @Test public void test() { MultiValuedMap<Integer, Integer> multiMap = new HashSetValuedHashMap<>(); multiMap.put(1, 10); multiMap.put(2, 20); for (Collection<Integer> innerCollection : multiMap.asMap().values()) { for (Iterator<Integer> iterator = innerCollection.iterator(); iterator.hasNext();) { Integer i = iterator.next(); iterator.remove(); // only the innerCollection is altered } } }{code} This test unexpectedly throws a ConcurrentModificationException. The issue is that when calling {{iterator.remove()}} the {{multimap.AbstractMultiValuedMap.ValuesIterator}} detects that the Collection is empty and calls {{AbstractMultiValuedMap.this.remove(key);}}. It would be better if the iterator of the inner collection had a reference on the iterator if the outer map and called {{containerIterator.remove()}} instead. In the current state, it is quite unclear why an exception is thrown, without debugging the code. > Unexpected ConcurrentModificationException when altering Collection of a > MultiValuedMap > --------------------------------------------------------------------------------------- > > Key: COLLECTIONS-663 > URL: https://issues.apache.org/jira/browse/COLLECTIONS-663 > Project: Commons Collections > Issue Type: Bug > Reporter: Christophe Schmaltz > > Testcase: > {code} @Test > public void test() { > MultiValuedMap<Integer, Integer> multiMap = new > HashSetValuedHashMap<>(); > multiMap.put(1, 10); > multiMap.put(2, 20); > for (Collection<Integer> innerCollection : > multiMap.asMap().values()) { > for (Iterator<Integer> iterator = > innerCollection.iterator(); iterator.hasNext();) { > Integer i = iterator.next(); > iterator.remove(); // only the innerCollection > is altered > } > } > }{code} > This test unexpectedly throws a ConcurrentModificationException. > The issue is that when calling {{iterator.remove()}} the > {{AbstractMultiValuedMap.ValuesIterator}} detects that the Collection is > empty and calls {{AbstractMultiValuedMap.this.remove(key);}}. > It would be better if the iterator of the inner collection had a reference on > the iterator if the outer map and called {{containerIterator.remove()}} > instead. > In the current state, it is quite unclear why an exception is thrown, without > debugging the code. -- This message was sent by Atlassian JIRA (v6.4.14#64029)