Yet another microbenchmark coming your way. Embarrassing to have COWAL win all these so handily.
--- IteratorMicroBenchmark.java 11 May 2018 18:19:10 -0000 1.45 +++ IteratorMicroBenchmark.java 11 May 2018 22:35:32 -0000 1.46 @@ -564,6 +564,12 @@ sum[0] = 0; x.replaceAll(sneakyAdder); check.sum(sum[0]);}}}, + new Job(klazz + " equals") { + public void work() throws Throwable { + ArrayList<Integer> copy = new ArrayList<>(x); + for (int i = 0; i < iterations; i++) { + if (!x.equals(copy)) + throw new AssertionError();}}}, new Job(klazz + " hashCode") { public void work() throws Throwable { int hashCode = Arrays.hashCode(x.toArray()); C2: Method Millis Ratio ArrayList equals 58 1.000 ArrayList$SubList equals 72 1.240 LinkedList equals 101 1.739 AbstractList$SubList equals 164 2.822 Vector equals 162 2.790 SynchronizedRandomAccessList equals 182 3.129 CopyOnWriteArrayList equals 22 0.394 COWSubList equals 19 0.336 C1: Method Millis Ratio ArrayList equals 300 1.000 ArrayList$SubList equals 389 1.297 LinkedList equals 328 1.094 AbstractList$SubList equals 349 1.162 Vector equals 263 0.876 SynchronizedRandomAccessList equals 395 1.314 CopyOnWriteArrayList equals 78 0.262 COWSubList equals 80 0.269