On Wednesday 07 January 2015 11:20:57 you wrote: > On 07/01/15 10:57, Stanislav Baiduzhyi wrote: > > On Wednesday 07 January 2015 10:56:01 Chris Hegarty wrote: > >> public boolean hasNext() { > >> > >> - return cursor != size; > >> + return cursor != itrSize; > >> > >> } > > > > If the user will invoke list.remove(E) to remove current or previous > > element then iterator will be skipping some elements. > > If this happens, then next() and/or remove() will throw CME. > > Throwing ConcurrentModification > > > in hasNext() looks better in such case. > > It is not clear to me that users would be expecting CME from hasNext(), > whereas it is more next() and remove() is more obvious.
Yes, but that exactly how it works now, that's why second invocation of hasNext() returns false and we can see the issue Remi is talking about. If hasNext() will be throwing ConcurrentModification than will work as early warning system that something is wrong with this iterator. -- Regards, Stas