package org.openjdk; import org.openjdk.jmh.annotations.*; import java.util.*; /* Benchmark Mode Cnt Score Error Units ListBench.arrayAddToEnd thrpt 4 53.994 ± 0.093 ops/us ListBench.arrayAddToEndRemoveLast thrpt 4 61.146 ± 1.153 ops/us ListBench.linkedAddToEnd thrpt 4 27.041 ± 24.087 ops/us */ @State(Scope.Benchmark) public class ListBench { List base = List.of("foo", "bar", "baz", "bur", "fur", "dur", "lur", "kur"); LinkedList linked = new LinkedList<>(base); ArrayList array = new ArrayList<>(base); @Benchmark public void linkedAddToEnd() { linked.add(linked.removeLast()); } @Benchmark public void arrayAddToEnd() { array.add(array.remove(array.size() - 1)); } /** * Use a local implementation of ArrayList.removeLast(): * public E removeLast() { if (size == 0) { throw new NoSuchElementException(); } int newSize = size - 1; int modCount++; final Object[] es = elementData; @SuppressWarnings("unchecked") E oldValue = (E) es[newSize]; es[newSize] = null; size = newSize; return oldValue; } */ @Benchmark public void arrayAddToEndRemoveLast() { array.add(array.removeLast()); } }