diff --git a/core-java-collections/pom.xml b/core-java-collections/pom.xml index ff06714bfe..f954e8542e 100644 --- a/core-java-collections/pom.xml +++ b/core-java-collections/pom.xml @@ -47,26 +47,26 @@ ${eclipse.collections.version} - org.assertj - assertj-core - ${assertj.version} - test + org.openjdk.jmh + jmh-core + ${openjdk.jmh.version} - org.junit.platform - junit-platform-runner - ${junit.platform.version} - test + org.openjdk.jmh + jmh-generator-annprocess + ${openjdk.jmh.version} + + 1.19 1.2.0 3.5 4.1 4.01 1.7.0 3.6.1 - 9.2.0 + 7.1.0 diff --git a/core-java-collections/src/main/java/com/baeldung/performance/CollectionsBenchmark.java b/core-java-collections/src/main/java/com/baeldung/performance/CollectionsBenchmark.java new file mode 100644 index 0000000000..64cff16cd7 --- /dev/null +++ b/core-java-collections/src/main/java/com/baeldung/performance/CollectionsBenchmark.java @@ -0,0 +1,53 @@ +package com.baeldung.performance; + +import org.openjdk.jmh.annotations.*; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.concurrent.TimeUnit; + +public class CollectionsBenchmark { + + @State(Scope.Thread) + public static class MyState { + private Set employeeSet = new HashSet<>(); + private List employeeList = new ArrayList<>(); + + private final long m_count = 16; + + private Employee employee = new Employee(100L, "Harry"); + + @Setup(Level.Invocation) + public void setUp() { + + for (long ii = 0; ii < m_count; ii++) { + employeeSet.add(new Employee(ii, "John")); + employeeList.add(new Employee(ii, "John")); + + employeeList.add(employee); + employeeSet.add(employee); + } + } + } + + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + @OutputTimeUnit(TimeUnit.MINUTES) + public boolean testArrayList(MyState state) { + return state.employeeList.contains(state.employee); + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + @OutputTimeUnit(TimeUnit.MINUTES) + public boolean testHashSet(MyState state) { + return state.employeeSet.contains(state.employee); + } + + public static void main(String[] args) throws Exception { + org.openjdk.jmh.Main.main(args); + } +} diff --git a/core-java-collections/src/main/java/com/baeldung/performance/Employee.java b/core-java-collections/src/main/java/com/baeldung/performance/Employee.java new file mode 100644 index 0000000000..daa68ae2f1 --- /dev/null +++ b/core-java-collections/src/main/java/com/baeldung/performance/Employee.java @@ -0,0 +1,31 @@ +package com.baeldung.performance; + +public class Employee { + + private Long id; + private String name; + + public Employee(Long id, String name) { + this.name = name; + this.id = id; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + Employee employee = (Employee) o; + + if (!id.equals(employee.id)) return false; + return name.equals(employee.name); + + } + + @Override + public int hashCode() { + int result = id.hashCode(); + result = 31 * result + name.hashCode(); + return result; + } +}