From c9aef799094a42227849f2c7113b88b77f6cdc12 Mon Sep 17 00:00:00 2001 From: Bahaa El-Din Helmy Date: Thu, 18 May 2023 18:19:14 +0300 Subject: [PATCH] Title: Array vs List Performance in Java (#14034) This commit related to the article entitled "Array vs List Performance in Java". --- .../ArrayAndArrayListPerformance.java | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 core-java-modules/core-java-collections-5/src/main/java/com/baeldung/arrayandlistperformance/ArrayAndArrayListPerformance.java diff --git a/core-java-modules/core-java-collections-5/src/main/java/com/baeldung/arrayandlistperformance/ArrayAndArrayListPerformance.java b/core-java-modules/core-java-collections-5/src/main/java/com/baeldung/arrayandlistperformance/ArrayAndArrayListPerformance.java new file mode 100644 index 0000000000..183b7017d5 --- /dev/null +++ b/core-java-modules/core-java-collections-5/src/main/java/com/baeldung/arrayandlistperformance/ArrayAndArrayListPerformance.java @@ -0,0 +1,88 @@ +package com.baeldung.arrayandlistperformance; + +import org.openjdk.jmh.annotations.*; +import org.openjdk.jmh.infra.Blackhole; +import org.openjdk.jmh.runner.options.OptionsBuilder; + +import java.util.ArrayList; +import java.util.concurrent.TimeUnit; + +@State(Scope.Benchmark) +@BenchmarkMode(Mode.AverageTime) +@OutputTimeUnit(TimeUnit.NANOSECONDS) +public class ArrayAndArrayListPerformance { + + public static void main(String[] args) throws Exception { + org.openjdk.jmh.runner.Runner runner = new org.openjdk.jmh.runner.Runner(new OptionsBuilder().include(ArrayAndArrayListPerformance.class.getSimpleName()).forks(1).build()); + runner.run(); + } + + @Benchmark + public void arrayCreation(Blackhole blackhole) { + int[] array = new int[1000000]; + blackhole.consume(array); + } + + @Benchmark + public void arrayListCreation(Blackhole blackhole) { + ArrayList list = new ArrayList<>(1000000); + blackhole.consume(list); + } + + @Benchmark + public void arrayItemsSetting(Blackhole blackhole) { + int[] array = new int[1000000]; + for (int i = 0; i < 1000000; i++) { + array[i] = i; + } + blackhole.consume(array); + + } + + @Benchmark + public void arrayListItemsSetting(Blackhole blackhole) { + ArrayList list = new ArrayList<>(1000000); + for (int i = 0; i < 1000000; i++) { + list.add(i); + } + blackhole.consume(list); + } + + @Benchmark + public void arrayItemsRetrieval(Blackhole blackhole) { + int[] array = new int[1000000]; + for (int i = 0; i < 1000000; i++) { + array[i] = i; + } + for (int i = 0; i < 1000000; i++) { + int item = array[i]; + blackhole.consume(item); + } + } + + @Benchmark + public void arrayListItemsRetrieval(Blackhole blackhole) { + ArrayList list = new ArrayList<>(); + for (int i = 0; i < 1000000; i++) { + list.add(i); + } + for (int i = 0; i < 1000000; i++) { + int item = list.get(i); + blackhole.consume(item); + } + } + + @Benchmark + public void arrayCloning(Blackhole blackhole) { + int[] array = new int[1000000]; + int[] newArray = array.clone(); + blackhole.consume(newArray); + } + + @Benchmark + public void arrayListCloning(Blackhole blackhole) { + ArrayList list = new ArrayList<>(1000000); + ArrayList newList = new ArrayList<>(list); + blackhole.consume(newList); + } +} \ No newline at end of file