@@ -123,6 +123,11 @@ public static <K, V> MapField<K, V> newMapField(MapEntry<K, V> defaultEntry) {
123123 return new MapField <K , V >(defaultEntry , StorageMode .MAP , new LinkedHashMap <K , V >());
124124 }
125125
126+ public static <K , V > MapField <K , V > newMapField (MapEntry <K , V > defaultEntry , int entries ) {
127+ int mapCapacity = calculateInitialCapacity (entries );
128+ return new MapField <K , V >(defaultEntry , StorageMode .MAP , new LinkedHashMap <K , V >(mapCapacity ));
129+ }
130+
126131 private Message convertKeyAndValueToMessage (K key , V value ) {
127132 return converter .convertKeyAndValueToMessage (key , value );
128133 }
@@ -132,15 +137,21 @@ private void convertMessageToKeyAndValue(Message message, Map<K, V> map) {
132137 }
133138
134139 private List <Message > convertMapToList (MutabilityAwareMap <K , V > mapData ) {
135- List <Message > listData = new ArrayList <Message >();
140+ List <Message > listData = new ArrayList <Message >(mapData . size () );
136141 for (Map .Entry <K , V > entry : mapData .entrySet ()) {
137142 listData .add (convertKeyAndValueToMessage (entry .getKey (), entry .getValue ()));
138143 }
139144 return listData ;
140145 }
141146
147+ private static int calculateInitialCapacity (int entries ) {
148+ // Map's default load factor is 0.75. Add 1 to round up.
149+ return (int ) Math .ceil (entries / (double ) 0.75 ) + 1 ;
150+ }
151+
142152 private MutabilityAwareMap <K , V > convertListToMap (List <Message > listData ) {
143- Map <K , V > mapData = new LinkedHashMap <K , V >();
153+ int mapCapacity = calculateInitialCapacity (listData .size ());
154+ Map <K , V > mapData = new LinkedHashMap <K , V >(mapCapacity );
144155 for (Message item : listData ) {
145156 convertMessageToKeyAndValue (item , mapData );
146157 }
0 commit comments