java list foreach iterator_Java ListIterator.forEachRemaining方法代码示例

import java.util.ListIterator; //导入方法依赖的package包/类

public void testOptimizedForEach() throws Exception {

final Integer[] data = new Integer[1000 * 1000];

for (int i=0; i < data.length; i++) {

data[i] = i;

}

final List source = Arrays.asList(data);

final String[] listClasses = {

"java.util.ArrayList",

"java.util.LinkedList",

"java.util.Vector",

"java.util.concurrent.CopyOnWriteArrayList"

};

final int OFFSET = 3;

final List target = new ArrayList<>(source);

for (final String listClass : listClasses) {

final List list =

(List) Class.forName(listClass).newInstance();

list.addAll(source);

final ListIterator iterator = list.listIterator();

assertFalse(iterator.hasPrevious());

for (int i=0; i < OFFSET; i++) {

iterator.next();

}

assertTrue(iterator.hasNext());

assertTrue(iterator.hasPrevious());

assertEquals(iterator.nextIndex(), OFFSET);

assertEquals(iterator.previousIndex(), OFFSET - 1);

iterator.forEachRemaining(e -> {

target.set(e, e + 1);

});

for (int i=OFFSET; i < data.length; i++) {

assertEquals(target.get(i).intValue(), source.get(i)+1);

}

assertFalse(iterator.hasNext());

assertTrue(iterator.hasPrevious());

assertEquals(iterator.nextIndex(), data.length);

assertEquals(iterator.previousIndex(), data.length - 1);

// CopyOnWriteArrayList.listIterator().remove() is unsupported

if (!"java.util.concurrent.CopyOnWriteArrayList".equals(listClass)) {

for (int i = data.length - 1; i >= 0; i--) {

iterator.remove(); // must not throw

if (i > 0) {

iterator.previous();

}

}

assertTrue(list.isEmpty());

}

try {

iterator.next();

fail(listClass + " iterator advanced beyond end");

} catch (NoSuchElementException ignore) {

}

}

}

你可能感兴趣的:(java,list,foreach,iterator)