Created
October 12, 2023 21:39
-
-
Save tivrfoa/b96e4c9c0eb9ae3d444b2273e21dc27d to your computer and use it in GitHub Desktop.
Java LinkedList vs ArrayDeque vs ArrayList
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Benchmark Mode Cnt Score Error Units | |
LinkedListBenchmark.arrayDeque avgt 6 86861,575 ± 6681,783 ns/op | |
LinkedListBenchmark.arrayList avgt 6 207511,921 ± 20828,824 ns/op | |
LinkedListBenchmark.linkedList avgt 6 70281,152 ± 9929,807 ns/op | |
mvn clean verify | |
java -jar target/benchmarks.jar LinkedListBenchmark | |
Scenario: | |
Using it as a queue and removing the first element when processing | |
*/ | |
package org.sample; | |
import java.util.ArrayDeque; | |
import java.util.ArrayList; | |
import java.util.LinkedList; | |
import java.util.List; | |
import java.util.concurrent.TimeUnit; | |
import org.openjdk.jmh.annotations.Benchmark; | |
import org.openjdk.jmh.annotations.BenchmarkMode; | |
import org.openjdk.jmh.annotations.Fork; | |
import org.openjdk.jmh.annotations.Measurement; | |
import org.openjdk.jmh.annotations.Mode; | |
import org.openjdk.jmh.annotations.OutputTimeUnit; | |
import org.openjdk.jmh.annotations.Scope; | |
import org.openjdk.jmh.annotations.State; | |
import org.openjdk.jmh.annotations.Warmup; | |
@Fork (value = 2, warmups = 1) | |
@Warmup (iterations = 2, time = 3, timeUnit = TimeUnit.SECONDS) | |
@Measurement (iterations = 3, time = 1, timeUnit = TimeUnit.SECONDS) | |
@BenchmarkMode (Mode.AverageTime) | |
@OutputTimeUnit(TimeUnit.NANOSECONDS) | |
@State(Scope.Benchmark) | |
public class LinkedListBenchmark { | |
final static int MAX = 10_000; | |
@Benchmark | |
public List<Integer> linkedList() { | |
List<Integer> ret = new ArrayList<>(); | |
LinkedList<Integer> list = new LinkedList<>(); | |
for (int i = 0; i < MAX; i++) { | |
list.add(i); | |
if (i % 50 == 0) { | |
ret.add(list.removeFirst()); | |
} | |
} | |
return ret; | |
} | |
@Benchmark | |
public List<Integer> arrayDeque() { | |
List<Integer> ret = new ArrayList<>(); | |
ArrayDeque<Integer> list = new ArrayDeque<>(); | |
for (int i = 0; i < MAX; i++) { | |
list.add(i); | |
if (i % 50 == 0) { | |
ret.add(list.removeFirst()); | |
} | |
} | |
return ret; | |
} | |
@Benchmark | |
public List<Integer> arrayList() { | |
List<Integer> ret = new ArrayList<>(); | |
ArrayList<Integer> list = new ArrayList<>(); | |
for (int i = 0; i < MAX; i++) { | |
list.add(i); | |
if (i % 50 == 0) { | |
ret.add(list.remove(0)); | |
} | |
} | |
return ret; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment