From 12bd26efc34391aedfa4f2a45428e558a414f755 Mon Sep 17 00:00:00 2001
From: Lars Johansson <lars.johansson@ess.eu>
Date: Wed, 30 Nov 2022 10:15:05 +0100
Subject: [PATCH] Tweak HashMap handling and hash code functions for better
 performance

---
 .../names/repository/model/DeviceGroup.java         |  8 +-------
 .../names/repository/model/DeviceType.java          |  8 +-------
 .../names/repository/model/Discipline.java          |  3 ++-
 .../org/openepics/names/repository/model/Name.java  |  8 +-------
 .../names/repository/model/NameStructure.java       |  6 +-----
 .../names/repository/model/Persistable.java         |  2 +-
 .../openepics/names/repository/model/Structure.java |  7 +------
 .../openepics/names/repository/model/Subsystem.java |  8 +-------
 .../openepics/names/repository/model/System.java    |  8 +-------
 .../names/repository/model/SystemGroup.java         |  3 ++-
 .../names/util/HolderSystemDeviceStructure.java     | 13 +++++++------
 11 files changed, 19 insertions(+), 55 deletions(-)

diff --git a/src/main/java/org/openepics/names/repository/model/DeviceGroup.java b/src/main/java/org/openepics/names/repository/model/DeviceGroup.java
index 0fb5feb9..8bf563ef 100644
--- a/src/main/java/org/openepics/names/repository/model/DeviceGroup.java
+++ b/src/main/java/org/openepics/names/repository/model/DeviceGroup.java
@@ -127,13 +127,7 @@ public class DeviceGroup extends Structure {
 
     @Override
     public int hashCode() {
-        return Objects.hash(
-                getId(), getVersion(),
-                getUuid(), getDescription(), getStatus(), isLatest(), isDeleted(),
-                getRequested(), getRequestedBy(), getRequestedComment(),
-                getProcessed(), getProcessedBy(), getProcessedComment(),
-                getName(), getMnemonic(), getMnemonicEquivalence(),
-                getParentUuid());
+        return Objects.hash(getId(), getUuid());
     }
 
     @Override
diff --git a/src/main/java/org/openepics/names/repository/model/DeviceType.java b/src/main/java/org/openepics/names/repository/model/DeviceType.java
index 8c58a263..af7c9335 100644
--- a/src/main/java/org/openepics/names/repository/model/DeviceType.java
+++ b/src/main/java/org/openepics/names/repository/model/DeviceType.java
@@ -127,13 +127,7 @@ public class DeviceType extends Structure {
 
     @Override
     public int hashCode() {
-        return Objects.hash(
-                getId(), getVersion(),
-                getUuid(), getDescription(), getStatus(), isLatest(), isDeleted(),
-                getRequested(), getRequestedBy(), getRequestedComment(),
-                getProcessed(), getProcessedBy(), getProcessedComment(),
-                getName(), getMnemonic(), getMnemonicEquivalence(),
-                getParentUuid());
+        return Objects.hash(getId(), getUuid());
     }
 
     @Override
diff --git a/src/main/java/org/openepics/names/repository/model/Discipline.java b/src/main/java/org/openepics/names/repository/model/Discipline.java
index 10601435..afa4b3c3 100644
--- a/src/main/java/org/openepics/names/repository/model/Discipline.java
+++ b/src/main/java/org/openepics/names/repository/model/Discipline.java
@@ -19,6 +19,7 @@
 package org.openepics.names.repository.model;
 
 import java.util.Date;
+import java.util.Objects;
 import java.util.UUID;
 
 import javax.persistence.Entity;
@@ -103,7 +104,7 @@ public class Discipline extends Structure {
 
     @Override
     public int hashCode() {
-        return super.hashCode();
+        return Objects.hash(getId(), getUuid());
     }
 
     @Override
diff --git a/src/main/java/org/openepics/names/repository/model/Name.java b/src/main/java/org/openepics/names/repository/model/Name.java
index 32ed6c29..4462a5fe 100644
--- a/src/main/java/org/openepics/names/repository/model/Name.java
+++ b/src/main/java/org/openepics/names/repository/model/Name.java
@@ -224,13 +224,7 @@ public class Name extends NameStructure implements Serializable {
 
     @Override
     public int hashCode() {
-        return Objects.hash(
-                getId(), getVersion(),
-                getUuid(), getDescription(), getStatus(), isLatest(), isDeleted(),
-                getRequested(), getRequestedBy(), getRequestedComment(),
-                getProcessed(), getProcessedBy(), getProcessedComment(),
-                getSystemgroupUuid(), getSystemUuid(), getSubsystemUuid(), getDevicetypeUuid(), getInstanceIndex(),
-                getConventionName(), getConventionNameEquivalence());
+        return Objects.hash(getId(), getUuid());
     }
 
     @Override
diff --git a/src/main/java/org/openepics/names/repository/model/NameStructure.java b/src/main/java/org/openepics/names/repository/model/NameStructure.java
index c1c6a391..d521a753 100644
--- a/src/main/java/org/openepics/names/repository/model/NameStructure.java
+++ b/src/main/java/org/openepics/names/repository/model/NameStructure.java
@@ -232,11 +232,7 @@ public class NameStructure extends Persistable implements Serializable {
 
     @Override
     public int hashCode() {
-        return Objects.hash(
-                getId(), getVersion(),
-                getUuid(), getDescription(), getStatus(), isLatest(), isDeleted(),
-                getRequested(), getRequestedBy(), getRequestedComment(),
-                getProcessed(), getProcessedBy(), getProcessedComment());
+        return Objects.hash(getId(), getUuid());
     }
 
 }
diff --git a/src/main/java/org/openepics/names/repository/model/Persistable.java b/src/main/java/org/openepics/names/repository/model/Persistable.java
index d10763ed..bd8c2233 100644
--- a/src/main/java/org/openepics/names/repository/model/Persistable.java
+++ b/src/main/java/org/openepics/names/repository/model/Persistable.java
@@ -88,7 +88,7 @@ public class Persistable implements Serializable {
 
     @Override
     public int hashCode() {
-        return Objects.hash(getId(), getVersion());
+        return Objects.hash(getId());
     }
 
 }
diff --git a/src/main/java/org/openepics/names/repository/model/Structure.java b/src/main/java/org/openepics/names/repository/model/Structure.java
index 1d63b6b6..4be69803 100644
--- a/src/main/java/org/openepics/names/repository/model/Structure.java
+++ b/src/main/java/org/openepics/names/repository/model/Structure.java
@@ -171,12 +171,7 @@ public class Structure extends NameStructure implements Serializable {
 
     @Override
     public int hashCode() {
-        return Objects.hash(
-                getId(), getVersion(),
-                getUuid(), getDescription(), getStatus(), isLatest(), isDeleted(),
-                getRequested(), getRequestedBy(), getRequestedComment(),
-                getProcessed(), getProcessedBy(), getProcessedComment(),
-                getName(), getMnemonic(), getMnemonicEquivalence());
+        return Objects.hash(getId(), getUuid());
     }
 
 }
diff --git a/src/main/java/org/openepics/names/repository/model/Subsystem.java b/src/main/java/org/openepics/names/repository/model/Subsystem.java
index f0d526a7..f2dc8896 100644
--- a/src/main/java/org/openepics/names/repository/model/Subsystem.java
+++ b/src/main/java/org/openepics/names/repository/model/Subsystem.java
@@ -127,13 +127,7 @@ public class Subsystem extends Structure {
 
     @Override
     public int hashCode() {
-        return Objects.hash(
-                getId(), getVersion(),
-                getUuid(), getDescription(), getStatus(), isLatest(), isDeleted(),
-                getRequested(), getRequestedBy(), getRequestedComment(),
-                getProcessed(), getProcessedBy(), getProcessedComment(),
-                getName(), getMnemonic(), getMnemonicEquivalence(),
-                getParentUuid());
+        return Objects.hash(getId(), getUuid());
     }
 
     @Override
diff --git a/src/main/java/org/openepics/names/repository/model/System.java b/src/main/java/org/openepics/names/repository/model/System.java
index b2296ac5..bec3396d 100644
--- a/src/main/java/org/openepics/names/repository/model/System.java
+++ b/src/main/java/org/openepics/names/repository/model/System.java
@@ -127,13 +127,7 @@ public class System extends Structure {
 
     @Override
     public int hashCode() {
-        return Objects.hash(
-                getId(), getVersion(),
-                getUuid(), getDescription(), getStatus(), isLatest(), isDeleted(),
-                getRequested(), getRequestedBy(), getRequestedComment(),
-                getProcessed(), getProcessedBy(), getProcessedComment(),
-                getName(), getMnemonic(), getMnemonicEquivalence(),
-                getParentUuid());
+        return Objects.hash(getId(), getUuid());
     }
 
     @Override
diff --git a/src/main/java/org/openepics/names/repository/model/SystemGroup.java b/src/main/java/org/openepics/names/repository/model/SystemGroup.java
index 4109cc03..38007815 100644
--- a/src/main/java/org/openepics/names/repository/model/SystemGroup.java
+++ b/src/main/java/org/openepics/names/repository/model/SystemGroup.java
@@ -19,6 +19,7 @@
 package org.openepics.names.repository.model;
 
 import java.util.Date;
+import java.util.Objects;
 import java.util.UUID;
 
 import javax.persistence.Entity;
@@ -103,7 +104,7 @@ public class SystemGroup extends Structure {
 
     @Override
     public int hashCode() {
-        return super.hashCode();
+        return Objects.hash(getId(), getUuid());
     }
 
     @Override
diff --git a/src/main/java/org/openepics/names/util/HolderSystemDeviceStructure.java b/src/main/java/org/openepics/names/util/HolderSystemDeviceStructure.java
index 3c7eff65..e8dbaa02 100644
--- a/src/main/java/org/openepics/names/util/HolderSystemDeviceStructure.java
+++ b/src/main/java/org/openepics/names/util/HolderSystemDeviceStructure.java
@@ -94,12 +94,13 @@ public class HolderSystemDeviceStructure {
         //     default load factor 0.75
         //     set at proper size to avoid rehashing
         //     size/0.75+1 (may be rounded downwards so possibly +2 instead)
-        this.systemGroups = new HashMap<>((int)(systemGroupsRead.size()/0.75 + 2));
-        this.systems      = new HashMap<>((int)(systemsRead.size()/0.75 + 2));
-        this.subsystems   = new HashMap<>((int)(subsystemsRead.size()/0.75 + 2));
-        this.disciplines  = new HashMap<>((int)(disciplinesRead.size()/0.75 + 2));
-        this.deviceGroups = new HashMap<>((int)(deviceGroupsRead.size()/0.75 + 2));
-        this.deviceTypes  = new HashMap<>((int)(deviceTypesRead.size()/0.75 + 2));
+        float loadFactor = 0.75f;
+        this.systemGroups = new HashMap<>((int)(systemGroupsRead.size()/loadFactor + 2), loadFactor);
+        this.systems      = new HashMap<>((int)(systemsRead.size()/loadFactor + 2), loadFactor);
+        this.subsystems   = new HashMap<>((int)(subsystemsRead.size()/loadFactor + 2), loadFactor);
+        this.disciplines  = new HashMap<>((int)(disciplinesRead.size()/loadFactor + 2), loadFactor);
+        this.deviceGroups = new HashMap<>((int)(deviceGroupsRead.size()/loadFactor + 2), loadFactor);
+        this.deviceTypes  = new HashMap<>((int)(deviceTypesRead.size()/loadFactor + 2), loadFactor);
 
         for (SystemGroup systemGroup : systemGroupsRead) {
             this.systemGroups.put(systemGroup.getUuid(), systemGroup);
-- 
GitLab