From 0c0dc62c2b0ff46d9f8121c6d23e57fa1810395f Mon Sep 17 00:00:00 2001 From: godotg Date: Tue, 2 Jul 2024 12:56:05 +0800 Subject: [PATCH] perf[cow]: CopyOnWriteHashMap equals and hashcode --- .../test/java/com/zfoo/orm/accessor/MapTest.java | 2 +- .../java/com/zfoo/orm/entity/bag/MapEntity.java | 6 +++--- .../collection/concurrent/ConcurrentArrayList.java | 13 +++++-------- .../collection/concurrent/CopyOnWriteHashMap.java | 10 ++++++++++ .../concurrent/CopyOnWriteHashMapLongObject.java | 10 ++++++++++ 5 files changed, 29 insertions(+), 12 deletions(-) diff --git a/orm/src/test/java/com/zfoo/orm/accessor/MapTest.java b/orm/src/test/java/com/zfoo/orm/accessor/MapTest.java index 6b5abd44..ea1781c2 100644 --- a/orm/src/test/java/com/zfoo/orm/accessor/MapTest.java +++ b/orm/src/test/java/com/zfoo/orm/accessor/MapTest.java @@ -89,7 +89,7 @@ public class MapTest { bagMap.put("bag3", bagItem3); bagMap.put("bag4", null); - var map = new HashMap>(); + var map = new CopyOnWriteHashMap>(); map.put("a", Map.of("b", "b")); entity.setBaseMap(map); diff --git a/orm/src/test/java/com/zfoo/orm/entity/bag/MapEntity.java b/orm/src/test/java/com/zfoo/orm/entity/bag/MapEntity.java index 6e27fcae..ecf9cba3 100644 --- a/orm/src/test/java/com/zfoo/orm/entity/bag/MapEntity.java +++ b/orm/src/test/java/com/zfoo/orm/entity/bag/MapEntity.java @@ -34,7 +34,7 @@ public class MapEntity implements IEntity { private CopyOnWriteHashMap> copyOnWriteHashMap = new CopyOnWriteHashMap<>(); private Map bagMap = new HashMap<>(); - private Map> baseMap = new HashMap<>(); + private CopyOnWriteHashMap> baseMap = new CopyOnWriteHashMap<>(); private Map longStringMap = new HashMap<>(); private Map intStringMap = new HashMap<>(); @@ -101,11 +101,11 @@ public class MapEntity implements IEntity { this.bagMap = bagMap; } - public Map> getBaseMap() { + public CopyOnWriteHashMap> getBaseMap() { return baseMap; } - public void setBaseMap(Map> baseMap) { + public void setBaseMap(CopyOnWriteHashMap> baseMap) { this.baseMap = baseMap; } diff --git a/protocol/src/main/java/com/zfoo/protocol/collection/concurrent/ConcurrentArrayList.java b/protocol/src/main/java/com/zfoo/protocol/collection/concurrent/ConcurrentArrayList.java index 5988f5be..d35bb1fd 100644 --- a/protocol/src/main/java/com/zfoo/protocol/collection/concurrent/ConcurrentArrayList.java +++ b/protocol/src/main/java/com/zfoo/protocol/collection/concurrent/ConcurrentArrayList.java @@ -270,15 +270,12 @@ public class ConcurrentArrayList implements List { @Override public boolean equals(Object o) { - if (o == null) { - return false; + lock.lock(); + try { + return list.equals(o); + } finally { + lock.unlock(); } - - if (this != o) { - return false; - } - - return list.equals(o); } @Override diff --git a/protocol/src/main/java/com/zfoo/protocol/collection/concurrent/CopyOnWriteHashMap.java b/protocol/src/main/java/com/zfoo/protocol/collection/concurrent/CopyOnWriteHashMap.java index 4fadaa4a..f1996618 100644 --- a/protocol/src/main/java/com/zfoo/protocol/collection/concurrent/CopyOnWriteHashMap.java +++ b/protocol/src/main/java/com/zfoo/protocol/collection/concurrent/CopyOnWriteHashMap.java @@ -133,4 +133,14 @@ public class CopyOnWriteHashMap implements Map { public Set> entrySet() { return map.entrySet(); } + + @Override + public boolean equals(Object o) { + return map.equals(o); + } + + @Override + public int hashCode() { + return map.hashCode(); + } } diff --git a/protocol/src/main/java/com/zfoo/protocol/collection/concurrent/CopyOnWriteHashMapLongObject.java b/protocol/src/main/java/com/zfoo/protocol/collection/concurrent/CopyOnWriteHashMapLongObject.java index e7057fe9..ce65f28b 100644 --- a/protocol/src/main/java/com/zfoo/protocol/collection/concurrent/CopyOnWriteHashMapLongObject.java +++ b/protocol/src/main/java/com/zfoo/protocol/collection/concurrent/CopyOnWriteHashMapLongObject.java @@ -137,4 +137,14 @@ public class CopyOnWriteHashMapLongObject implements Map { public Set> entrySet() { return map.entrySet(); } + + @Override + public boolean equals(Object o) { + return map.equals(o); + } + + @Override + public int hashCode() { + return map.hashCode(); + } }