On 07/01/15 11:22, Stanislav Baiduzhyi wrote:
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.

The changes in the patch I suggested will change existing behavior. In Remi's case, hasNext() will now return true, and next() will throw CME.

-Chris.

Reply via email to