8274715: Implement forEach in Collections.CopiesList

Reviewed-by: martin
This commit is contained in:
Sergey Tsypanov 2021-10-05 22:19:35 +00:00 committed by Martin Buchholz
parent d4e8712c0a
commit df7b0c7077
2 changed files with 44 additions and 0 deletions

View File

@ -5182,6 +5182,16 @@ public class Collections {
return element;
}
@Override
public void forEach(Consumer<? super E> action) {
Objects.requireNonNull(action);
int n = this.n;
E element = this.element;
for (int i = 0; i < n; i++) {
action.accept(element);
}
}
public Object[] toArray() {
final Object[] a = new Object[n];
if (element != null)

View File

@ -0,0 +1,34 @@
package micro.org.openjdk.bench.java.util;
import org.openjdk.jmh.annotations.*;
import org.openjdk.jmh.infra.Blackhole;
import java.util.*;
import java.util.concurrent.TimeUnit;
/**
* @see <a href="https://bugs.openjdk.java.net/browse/JDK-8274715">JDK-8274715</a>
*/
@Fork(value = 3)
@State(Scope.Thread)
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@Warmup(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)
@Measurement(iterations = 5, time = 2, timeUnit = TimeUnit.SECONDS)
public class NCopiesBenchmarks {
@Param({"10", "50", "100"})
int size;
private List<Object> list;
@Setup
public void prepare() {
list = Collections.nCopies(size, new Object());
}
@Benchmark
public void forEach(Blackhole bh) {
list.forEach(bh::consume);
}
}