import org.openjdk.jmh.annotations.*;
import java.util.*;
import java.util.concurrent.TimeUnit;
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.MICROSECONDS)
public class Lists {
@State
public static class AL extends ArrayList<Object> {
@Setup(Level.Invocation)
public void fill() {
Object x = new Object();
for (int i = 0; i < 1000; i++) {
add(x);
}
}
}
@State
public static class LL extends LinkedList<Object> {
@Setup(Level.Invocation)
public void fill() {
Object x = new Object();
for (int i = 0; i < 1000; i++) {
add(x);
}
}
}
@GenerateMicroBenchmark
public int arrayList_add() {
List<Object> list = new ArrayList<>(1000);
Object x = new Object();
for (int i = 0; i < 1000; i++) {
list.add(x);
}
return list.size();
}
@GenerateMicroBenchmark
public int linkedList_add() {
List<Object> list = new LinkedList<>();
Object x = new Object();
for (int i = 0; i < 1000; i++) {
list.add(x);
}
return list.size();
}
@GenerateMicroBenchmark
public int arrayList_remove(AL list) {
for (int i = 999; i >= 0; i--) {
list.remove(i / 2);
}
return list.size();
}
@GenerateMicroBenchmark
public int linkedList_remove(LL list) {
for (int i = 999; i >= 0; i--) {
list.remove(i / 2);
}
return list.size();
}
}
t.Lists.arrayList_add avgt 1 20 0 5,234 0,019 usec/op
t.Lists.arrayList_remove avgt 1 20 0 82,344 0,201 usec/op
t.Lists.linkedList_add avgt 1 20 0 6,417 0,032 usec/op
t.Lists.linkedList_remove avgt 1 20 0 219,556 0,545 usec/op
Вставка и удаление работают быстрее в LinkedList