Initialize LinkedHashMap with correct initial size to avoid unnecessary resizing

Signed-off-by: Thomas Heigl <thomas.heigl@gmail.com>
pull/4944/head
Thomas Heigl 2 years ago
parent 318f11fea6
commit 34ff5f918d

@ -55,7 +55,8 @@ public class ObjectMapDecoder implements MultiDecoder<Object> {
return parts; return parts;
} }
Map<Object, Object> result = new LinkedHashMap<>(parts.size()/2); int size = parts.size()/2;
Map<Object, Object> result = new LinkedHashMap<>(size < 3 ? size + 1 : (int) Math.ceil(size/0.75));
for (int i = 0; i < parts.size(); i++) { for (int i = 0; i < parts.size(); i++) {
if (i % 2 != 0) { if (i % 2 != 0) {
result.put(parts.get(i-1), parts.get(i)); result.put(parts.get(i-1), parts.get(i));

@ -42,7 +42,8 @@ public class ObjectMapEntryReplayDecoder implements MultiDecoder<Set<Entry<Objec
@Override @Override
public Set<Entry<Object, Object>> decode(List<Object> parts, State state) { public Set<Entry<Object, Object>> decode(List<Object> parts, State state) {
Map<Object, Object> result = new LinkedHashMap<Object, Object>(parts.size()/2); int size = parts.size()/2;
Map<Object, Object> result = new LinkedHashMap<>(size < 3 ? size + 1 : (int) Math.ceil(size/0.75));
for (int i = 0; i < parts.size(); i++) { for (int i = 0; i < parts.size(); i++) {
if (i % 2 != 0) { if (i % 2 != 0) {
result.put(parts.get(i-1), parts.get(i)); result.put(parts.get(i-1), parts.get(i));

@ -52,7 +52,8 @@ public class ObjectMapReplayDecoder<K, V> implements MultiDecoder<Map<K, V>> {
@Override @Override
public Map<K, V> decode(List<Object> parts, State state) { public Map<K, V> decode(List<Object> parts, State state) {
Map<K, V> result = new LinkedHashMap<>(parts.size()/2); int size = parts.size()/2;
Map<K, V> result = new LinkedHashMap<>(size < 3 ? size + 1 : (int) Math.ceil(size/0.75));
for (int i = 0; i < parts.size(); i++) { for (int i = 0; i < parts.size(); i++) {
if (i % 2 != 0) { if (i % 2 != 0) {
result.put((K) parts.get(i-1), (V) parts.get(i)); result.put((K) parts.get(i-1), (V) parts.get(i));

@ -30,7 +30,8 @@ public class StringMapReplayDecoder implements MultiDecoder<Map<String, String>>
@Override @Override
public Map<String, String> decode(List<Object> parts, State state) { public Map<String, String> decode(List<Object> parts, State state) {
Map<String, String> result = new LinkedHashMap<>(parts.size()/2); int size = parts.size()/2;
Map<String, String> result = new LinkedHashMap<>(size < 3 ? size + 1 : (int) Math.ceil(size/0.75));
for (int i = 0; i < parts.size(); i++) { for (int i = 0; i < parts.size(); i++) {
if (i % 2 != 0) { if (i % 2 != 0) {
result.put(parts.get(i-1).toString(), parts.get(i).toString()); result.put(parts.get(i-1).toString(), parts.get(i).toString());

Loading…
Cancel
Save