diff --git a/core-java-modules/core-java-collections-4/pom.xml b/core-java-modules/core-java-collections-4/pom.xml index daf2588ece..7eb8222211 100644 --- a/core-java-modules/core-java-collections-4/pom.xml +++ b/core-java-modules/core-java-collections-4/pom.xml @@ -1,31 +1,31 @@ - 4.0.0 - core-java-collections-4 - 0.1.0-SNAPSHOT - core-java-collections-4 - jar - - - com.baeldung.core-java-modules - core-java-modules - 0.0.1-SNAPSHOT - ../pom.xml - + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + core-java-collections-4 + 0.1.0-SNAPSHOT + core-java-collections-4 + jar - - - org.assertj - assertj-core - ${assertj.version} - test - - + + com.baeldung.core-java-modules + core-java-modules + 0.0.1-SNAPSHOT + ../pom.xml + - - 3.19.0 - + + + org.assertj + assertj-core + ${assertj.version} + test + + + + + 3.19.0 + \ No newline at end of file diff --git a/core-java-modules/core-java-collections-4/src/main/java/com/baeldung/collections/toarraycomparison/ToArrayBenchmark.java b/core-java-modules/core-java-collections-4/src/main/java/com/baeldung/collections/toarraycomparison/ToArrayBenchmark.java new file mode 100644 index 0000000000..fe76a9ab3d --- /dev/null +++ b/core-java-modules/core-java-collections-4/src/main/java/com/baeldung/collections/toarraycomparison/ToArrayBenchmark.java @@ -0,0 +1,72 @@ +package com.baeldung.collections.toarraycomparison; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.TreeSet; +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.Param; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.Setup; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.Warmup; + +@Warmup(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS) +@Measurement(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS) +@Fork(value = 3, jvmArgsAppend = { "-XX:+UseParallelGC", "-Xms4g", "-Xmx4g" }) +@BenchmarkMode(Mode.AverageTime) +@OutputTimeUnit(TimeUnit.NANOSECONDS) +@State(Scope.Benchmark) +public class ToArrayBenchmark { + + @Param({ "10", "10000", "10000000" }) + private int size; + + @Param({ "array-list", "tree-set" }) + private String type; + + private Collection collection; + + @Setup + public void setup() { + switch (type) { + case "array-list": + collection = new ArrayList(); + break; + case "tree-set": + collection = new TreeSet(); + break; + default: + throw new UnsupportedOperationException(); + } + for (int i = 0; i < size; i++) { + collection.add(String.valueOf(i)); + } + } + + @Benchmark + public String[] zero_sized() { + return collection.toArray(new String[0]); + } + + @Benchmark + public String[] pre_sized() { + return collection.toArray(new String[collection.size()]); + } + + + public static void main(String[] args) { + try { + org.openjdk.jmh.Main.main(args); + } catch (IOException e) { + e.printStackTrace(); + } + } +}