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

Я хочу знать, в сравнении с классом MessageFormat или StringBuilder. Скажем, например, у меня есть String. Что касается производительности, какой из них быстрее: 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
Вы сами пробовали? #OneOfTheMostCommonКомментарииInSO   -  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 нс

StringBuilder: 16705 нс

Вывод:

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