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); } }