From a4a19be54538f773ac0829a13e261273cf10590b Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Wed, 26 Apr 2023 13:58:25 -0400 Subject: [PATCH] Avoid using replaceAll --- .../modernfix/util/CanonizingStringMap.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/embeddedt/modernfix/util/CanonizingStringMap.java b/src/main/java/org/embeddedt/modernfix/util/CanonizingStringMap.java index f4238504..737e9bca 100644 --- a/src/main/java/org/embeddedt/modernfix/util/CanonizingStringMap.java +++ b/src/main/java/org/embeddedt/modernfix/util/CanonizingStringMap.java @@ -137,11 +137,14 @@ public class CanonizingStringMap implements Map { public static CanonizingStringMap deepCopy(CanonizingStringMap inputMap, Function deepCopier) { Object2ObjectMap copiedBackingMap; - if(inputMap.backingMap instanceof Object2ObjectArrayMap) - copiedBackingMap = ((Object2ObjectArrayMap)inputMap.backingMap).clone(); - else - copiedBackingMap = ((Object2ObjectOpenHashMap)inputMap.backingMap).clone(); - copiedBackingMap.replaceAll((k, v) -> deepCopier.apply(v)); + int size = inputMap.backingMap.size(); + if(size > GROWTH_THRESHOLD) { + copiedBackingMap = new Object2ObjectOpenHashMap<>(size); + } else + copiedBackingMap = new Object2ObjectArrayMap<>(size); + inputMap.backingMap.object2ObjectEntrySet().forEach(entry -> { + copiedBackingMap.put(entry.getKey(), deepCopier.apply(entry.getValue())); + }); return new CanonizingStringMap<>(copiedBackingMap); } }