CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<String>(); list.addAll(Arrays.asList("a", "b", "c", "d", "e")); ListIterator<String> i = list.listIterator(5); list.clear(); assertEquals(5, i.nextIndex()); assertEquals(4, i.previousIndex()); assertEquals("e", i.previous()); assertEquals(4, i.nextIndex()); assertEquals(3, i.previousIndex()); assertTrue(i.hasNext()); assertTrue(i.hasPrevious()); assertEquals("d", i.previous()); assertEquals(3, i.nextIndex()); assertEquals(2, i.previousIndex()); assertTrue(i.hasNext()); assertTrue(i.hasPrevious()); assertEquals("c", i.previous()); assertEquals(2, i.nextIndex()); assertEquals(1, i.previousIndex()); assertTrue(i.hasNext()); assertTrue(i.hasPrevious()); assertEquals("b", i.previous()); assertEquals(1, i.nextIndex()); assertEquals(0, i.previousIndex()); assertTrue(i.hasNext()); assertTrue(i.hasPrevious()); assertEquals("a", i.previous()); assertEquals(0, i.nextIndex()); assertEquals(-1, i.previousIndex()); assertTrue(i.hasNext()); assertFalse(i.hasPrevious()); try { i.previous(); fail(); } catch (NoSuchElementException expected) { } }