Skip to content

Instantly share code, notes, and snippets.

@artspb
Created November 25, 2017 13:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save artspb/663086d1358dd5f1498b7b8285d7527b to your computer and use it in GitHub Desktop.
Save artspb/663086d1358dd5f1498b7b8285d7527b to your computer and use it in GitHub Desktop.
@State(Scope.Thread)
@OutputTimeUnit(TimeUnit.MICROSECONDS)
public class MegamorphicList {
private List<String>[] strings;
@Setup(Level.Trial)
public void init() {
strings = new List[]{getArrayList1(6), getArrayList2(6), getArrayList3(6), getArrayList(6), getFactoryList6(), getUnModifiableList(6)};
}
@Benchmark
public int sumLength_ArrayList1() {
List<String> list = strings[0];
int blackhole = 0;
for (int i = 0; i < list.size(); ++i) {
blackhole += list.get(i).length();
}
return blackhole;
}
@Benchmark
public int sumLength_ArrayList2() {
List<String> list = strings[1];
int blackhole = 0;
for (int i = 0; i < list.size(); ++i) {
blackhole += list.get(i).length();
}
return blackhole;
}
@Benchmark
public int sumLength_ArrayList3() {
List<String> list = strings[2];
int blackhole = 0;
for (int i = 0; i < list.size(); ++i) {
blackhole += list.get(i).length();
}
return blackhole;
}
@Benchmark
public int sumLength_ArrayList() {
List<String> list = strings[3];
int blackhole = 0;
for (int i = 0; i < list.size(); ++i) {
blackhole += list.get(i).length();
}
return blackhole;
}
@Benchmark
public int sumLength_Factory() {
List<String> list = strings[4];
int blackhole = 0;
for (int i = 0; i < list.size(); ++i) {
blackhole += list.get(i).length();
}
return blackhole;
}
@Benchmark
public int sumLength_Unmodifiable() {
List<String> list = strings[5];
int blackhole = 0;
for (int i = 0; i < list.size(); ++i) {
blackhole += list.get(i).length();
}
return blackhole;
}
@Benchmark
public int sumLength_Random2() {
List<String> list = strings[ThreadLocalRandom.current().nextInt(2)];
int blackhole = 0;
for (int i = 0; i < list.size(); ++i) {
blackhole += list.get(i).length();
}
return blackhole;
}
@Benchmark
public int sumLength_Random3() {
List<String> list = strings[ThreadLocalRandom.current().nextInt(3)];
int blackhole = 0;
for (int i = 0; i < list.size(); ++i) {
blackhole += list.get(i).length();
}
return blackhole;
}
@Benchmark
public int sumLength_Random4() {
List<String> list = strings[ThreadLocalRandom.current().nextInt(4)];
int blackhole = 0;
for (int i = 0; i < list.size(); ++i) {
blackhole += list.get(i).length();
}
return blackhole;
}
@Benchmark
public int sumLength_Random5() {
List<String> list = strings[ThreadLocalRandom.current().nextInt(5)];
int blackhole = 0;
for (int i = 0; i < list.size(); ++i) {
blackhole += list.get(i).length();
}
return blackhole;
}
@Benchmark
public int sumLength_Random6() {
List<String> list = strings[ThreadLocalRandom.current().nextInt(6)];
int blackhole = 0;
for (int i = 0; i < list.size(); ++i) {
blackhole += list.get(i).length();
}
return blackhole;
}
private List<String> getUnModifiableList(int size) {
return Collections.unmodifiableList(getArrayList(size));
}
private List<String> getFactoryList6() {
return List.of(randomString(),
randomString(),
randomString(),
randomString(),
randomString(),
randomString()
);
}
private List<String> getArrayList(int size) {
List<String> list = new ArrayList<>();
for (int i = 0; i < size; ++i) {
list.add(randomString());
}
return list;
}
private List<String> getArrayList1(int size) {
List<String> list = new ArrayList1<>(); // copy of java.util.ArrayList which extends AbstractList1 which is a copy of java.util.AbstractList
for (int i = 0; i < size; ++i) {
list.add(randomString());
}
return list;
}
private List<String> getArrayList2(int size) {
List<String> list = new ArrayList2<>(); // copy of java.util.ArrayList which extends AbstractList2 which is a copy of java.util.AbstractList
for (int i = 0; i < size; ++i) {
list.add(randomString());
}
return list;
}
private List<String> getArrayList3(int size) {
List<String> list = new ArrayList3<>(); // copy of java.util.ArrayList which extends AbstractList3 which is a copy of java.util.AbstractList
for (int i = 0; i < size; ++i) {
list.add(randomString());
}
return list;
}
private String randomString() {
return UUID.randomUUID().toString();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment