Есть ли более эффективный способ добавить строку перед другой строкой? - PullRequest
2 голосов
/ 28 апреля 2020

Использование метода StringBuilder.insert, например:

 builder.insert(0, str)

, кажется разумным способом добавить экземпляр String перед другой строкой, но после просмотра исходного кода метода insert Я не уверен, является ли это эффективным способом сделать это, потому что метод вставки должен установить достаточную емкость и выполнить некоторое смещение:

 public AbstractStringBuilder insert(int offset, String str) {
        ...
        ensureCapacityInternal(count + len);
        shift(offset, len);
       ...
    }

, и оба зависят от использования System.arraycopy.

Я написал класс StringCombiner, который просто добавляет две строки:

 public StringCombiner prepend(String pre){
     this.string =  pre + this.string;
     return this;
 }

После выполнения некоторых тестов производительности метод insert все еще кажется намного более быстрым, поскольку создание новой строки кажется гораздо большее снижение производительности.

Поэтому я хотел бы знать, есть ли другой более эффективный способ добавить строку перед другой.

Thx.

1 Ответ

3 голосов
/ 28 апреля 2020

Ваш метод prepend() использует строковый оператор +, который внутренне создает StringBuilder, добавляет обе строки и преобразует результат в строку. Таким образом, оператор + не может вам помочь.

Если он просто добавляет две строки, улучшить его невозможно.

Если он внутри al oop, вы можете получить Некоторое улучшение за счет изменения l oop, поэтому вы начинаете с той части строки результата, которая размещается в самом начале результата, и вместо непрерывного добавления (и, следовательно, многократного перемещения постоянно растущих накопленных последовательностей символов), вы Вы закончите добавление строк и сохраните большинство символов на месте.

Таким образом, улучшения возможны только с учетом большего контекста этой строковой операции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...