Bug in ArrayList iterator

Stanislav Baiduzhyi sbaiduzh at redhat.com
Wed Jan 7 11:22:06 UTC 2015


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




More information about the core-libs-dev mailing list