Проблем с производителността: java.text.MessageFormat.format срещу StringBuilder

Искам да знам за сравнение на MessageFormat или StringBuilder клас. Да кажем пример, че имам низ. Що се отнася до производителността, кой от тях е бърз: java.text.MessageFormat.format или StringBuilder("Test ").append("Hello ")?

String txt = java.text.MessageFormat.format("Test {0}"," Hello") 
String txt1=   new StringBuilder("Test ").append("Hello ")

Просто искам да знам кой се използва в случай на най-добра практика или производителност


person user2160287    schedule 12.03.2013    source източник
comment
Защо го тествате за скоростта, а не сам? Моето предположение: StringBuilder е по-бързо.   -  person MrSmith42    schedule 12.03.2013
comment
StringBuilder е най-бързият, но вероятно е без значение. Просто toString може да бъде много по-скъп.   -  person Joop Eggen    schedule 12.03.2013
comment
Вие опитахте ли сами? #OfTheMostCommonCommentsInSO   -  person rajesh    schedule 12.03.2013
comment
Бих се учудил, ако можете да измерите разликата във всяко практическо приложение. Мрежовите и дисковите скорости ще преобладават.   -  person user207421    schedule 12.03.2013


Отговори (2)


Опитайте сами:

long start = System.nanoTime();
String txt = MessageFormat.format("Test {0}"," Hello");
System.out.println("MessageFormat: " + (System.nanoTime() - start) + " ns");

start = System.nanoTime();
String txt1 = new StringBuilder("Test ").append("Hello").toString();
System.out.println("StringBuilder: " + (System.nanoTime() - start) + " ns");

Изход:

Формат на съобщението: 1125974 ns

StringBuilder: 16705 ns

Заключение:

StringBuilder работи много по-бързо, защото просто добавя няколко символа към съществуващия масив.

person bsiamionau    schedule 12.03.2013
comment
Достатъчно просто за разбиране. Благодаря. - person vissu; 21.12.2018
comment
Това не е добро сравнение, защото форматът на съобщението се анализира всеки път. Подобно на класа RegExp Pattern, предвидената употреба е шаблонът/шаблонът за формат да се настрои веднъж, след което да се използва много пъти, без да се анализира повторно. - person foo; 04.12.2020
comment
Измерих String.format да отнеме около 4 пъти повече време от предварително анализиран messageFormat.format() - person Charlie; 23.04.2021

StringBuilder добавя само текст към динамичен буфер, докато MessageFormat трябва да анализира дадения формат, преди да добави данните, тогава StringBuilder е по-ефективен от MessageFormat.

person Javier    schedule 12.03.2013
comment
Благодаря .. аз също мисля, че по същия начин StringBuilder е по-бърз от Message.format - person user2160287; 12.03.2013