From bca93d737726692eefcd81b29a0b18f1885e7958 Mon Sep 17 00:00:00 2001 From: Jasper Geurtz Date: Sat, 31 Oct 2026 09:40:35 +0100 Subject: [PATCH] micro optimize map lookups & use a more specialized hashcode for ID-based types --- src/main/java/bwapi/Bullet.java | 2 +- src/main/java/bwapi/Color.java | 2 +- src/main/java/bwapi/ConnectedUnitCache.java | 13 +++++-------- src/main/java/bwapi/Force.java | 2 +- src/main/java/bwapi/Player.java | 2 +- src/main/java/bwapi/Region.java | 2 +- src/main/java/bwapi/Unit.java | 2 +- 7 files changed, 11 insertions(+), 14 deletions(-) diff --git a/src/main/java/bwapi/Bullet.java b/src/main/java/bwapi/Bullet.java index af7d92c..0c8ef6c 100644 --- a/src/main/java/bwapi/Bullet.java +++ b/src/main/java/bwapi/Bullet.java @@ -197,7 +197,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return Objects.hash(id); + return Integer.hashCode(id); } @Override diff --git a/src/main/java/bwapi/Color.java b/src/main/java/bwapi/Color.java index 3287646..61d666b 100644 --- a/src/main/java/bwapi/Color.java +++ b/src/main/java/bwapi/Color.java @@ -190,7 +190,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return Objects.hash(id); + return Integer.hashCode(id); } @Override diff --git a/src/main/java/bwapi/ConnectedUnitCache.java b/src/main/java/bwapi/ConnectedUnitCache.java index 6b2514c..cb24170 100644 --- a/src/main/java/bwapi/ConnectedUnitCache.java +++ b/src/main/java/bwapi/ConnectedUnitCache.java @@ -27,18 +27,15 @@ List getConnected(final Unit unit) { for (final Unit u : game.getAllUnits()) { final Unit owner = condition.apply(u); if (owner != null) { - if (!connectedUnits.containsKey(owner)) { - connectedUnits.put(owner, new ArrayList<>()); - } - connectedUnits.get(owner).add(u); + connectedUnits.computeIfAbsent(owner, k -> new ArrayList<>()).add(u); } } lastUpdate = frame; } - if (!connectedUnits.containsKey(unit)) { - return Collections.emptyList(); - } - return Collections.unmodifiableList(connectedUnits.get(unit)); + List connected = connectedUnits.get(unit); + return connected == null ? + Collections.emptyList() : + Collections.unmodifiableList(connected); } void reset() { lastUpdate = -1; diff --git a/src/main/java/bwapi/Force.java b/src/main/java/bwapi/Force.java index 3e01e61..bc3027d 100644 --- a/src/main/java/bwapi/Force.java +++ b/src/main/java/bwapi/Force.java @@ -64,7 +64,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return Objects.hash(id); + return Integer.hashCode(id); } @Override diff --git a/src/main/java/bwapi/Player.java b/src/main/java/bwapi/Player.java index a2cd0ca..263e677 100644 --- a/src/main/java/bwapi/Player.java +++ b/src/main/java/bwapi/Player.java @@ -848,7 +848,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return Objects.hash(id); + return Integer.hashCode(id); } @Override diff --git a/src/main/java/bwapi/Region.java b/src/main/java/bwapi/Region.java index a7c2011..57f228b 100644 --- a/src/main/java/bwapi/Region.java +++ b/src/main/java/bwapi/Region.java @@ -250,7 +250,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return Objects.hash(id); + return Integer.hashCode(id); } @Override diff --git a/src/main/java/bwapi/Unit.java b/src/main/java/bwapi/Unit.java index 9c9ee61..d52d493 100644 --- a/src/main/java/bwapi/Unit.java +++ b/src/main/java/bwapi/Unit.java @@ -6345,7 +6345,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return Objects.hash(id); + return Integer.hashCode(id); } public int compareTo(final Unit other) {