diff --git a/redisson/src/main/java/org/redisson/client/protocol/decoder/ObjectMapDecoder.java b/redisson/src/main/java/org/redisson/client/protocol/decoder/ObjectMapDecoder.java index e89dee384..35cbcf3b8 100644 --- a/redisson/src/main/java/org/redisson/client/protocol/decoder/ObjectMapDecoder.java +++ b/redisson/src/main/java/org/redisson/client/protocol/decoder/ObjectMapDecoder.java @@ -55,7 +55,8 @@ public class ObjectMapDecoder implements MultiDecoder { return parts; } - Map result = new LinkedHashMap<>(parts.size()/2); + int size = parts.size()/2; + Map result = new LinkedHashMap<>(size < 3 ? size + 1 : (int) Math.ceil(size/0.75)); for (int i = 0; i < parts.size(); i++) { if (i % 2 != 0) { result.put(parts.get(i-1), parts.get(i)); diff --git a/redisson/src/main/java/org/redisson/client/protocol/decoder/ObjectMapEntryReplayDecoder.java b/redisson/src/main/java/org/redisson/client/protocol/decoder/ObjectMapEntryReplayDecoder.java index fd705709e..ae078bff6 100644 --- a/redisson/src/main/java/org/redisson/client/protocol/decoder/ObjectMapEntryReplayDecoder.java +++ b/redisson/src/main/java/org/redisson/client/protocol/decoder/ObjectMapEntryReplayDecoder.java @@ -42,7 +42,8 @@ public class ObjectMapEntryReplayDecoder implements MultiDecoder> decode(List parts, State state) { - Map result = new LinkedHashMap(parts.size()/2); + int size = parts.size()/2; + Map result = new LinkedHashMap<>(size < 3 ? size + 1 : (int) Math.ceil(size/0.75)); for (int i = 0; i < parts.size(); i++) { if (i % 2 != 0) { result.put(parts.get(i-1), parts.get(i)); diff --git a/redisson/src/main/java/org/redisson/client/protocol/decoder/ObjectMapReplayDecoder.java b/redisson/src/main/java/org/redisson/client/protocol/decoder/ObjectMapReplayDecoder.java index d520f22c8..e3492df2f 100644 --- a/redisson/src/main/java/org/redisson/client/protocol/decoder/ObjectMapReplayDecoder.java +++ b/redisson/src/main/java/org/redisson/client/protocol/decoder/ObjectMapReplayDecoder.java @@ -52,7 +52,8 @@ public class ObjectMapReplayDecoder implements MultiDecoder> { @Override public Map decode(List parts, State state) { - Map result = new LinkedHashMap<>(parts.size()/2); + int size = parts.size()/2; + Map result = new LinkedHashMap<>(size < 3 ? size + 1 : (int) Math.ceil(size/0.75)); for (int i = 0; i < parts.size(); i++) { if (i % 2 != 0) { result.put((K) parts.get(i-1), (V) parts.get(i)); diff --git a/redisson/src/main/java/org/redisson/client/protocol/decoder/StringMapReplayDecoder.java b/redisson/src/main/java/org/redisson/client/protocol/decoder/StringMapReplayDecoder.java index b1f1f0cb3..f968c58d3 100644 --- a/redisson/src/main/java/org/redisson/client/protocol/decoder/StringMapReplayDecoder.java +++ b/redisson/src/main/java/org/redisson/client/protocol/decoder/StringMapReplayDecoder.java @@ -30,7 +30,8 @@ public class StringMapReplayDecoder implements MultiDecoder> @Override public Map decode(List parts, State state) { - Map result = new LinkedHashMap<>(parts.size()/2); + int size = parts.size()/2; + Map result = new LinkedHashMap<>(size < 3 ? size + 1 : (int) Math.ceil(size/0.75)); for (int i = 0; i < parts.size(); i++) { if (i % 2 != 0) { result.put(parts.get(i-1).toString(), parts.get(i).toString());