Given following code as sample:
Map<String, List<String>> warningMap = (Map<String, List<String>>) warningsOrErrorsMapVariable;
StringBuilder warningMessages = new StringBuilder(size?!);
for (Iterator<String> keyIterator = warningMap.keySet().iterator(); keyIterator.hasNext();) {
Object key = keyIterator.next();
if (!keyIterator.hasNext()) {
isLastKey = true;
}
List<String> values = warningMap.get(key);
if (values != null) {
isLastValue = false;
for (Iterator<String> valueIterator = values.iterator(); valueIterator.hasNext();) {
String message = valueIterator.next();
if (!valueIterator.hasNext()) {
isLastValue = true;
}
warningMessages.append(message);
if (!(isLastKey && isLastValue)) {
warningMessages.append(NEW_LINE);
}
}
}
}
return warningMessages.toString();
What the best practice to declare StringBuiler
with proper size for compound structures?
One of options is predicting size o whole map by mapElems* listElems * predictedListElemSize
, the other one is visiting each element and getting exact size, but both of them requires iterating thru all map twice - firstly to get size, secondly to get String values appened to buffer. Is it worth it?
Wont the whole "computing size of elems" be more time consuming than resizing buffer of builder when needed?