Я не знаю, где вы нашли эту информацию.От O (1) до O (n) для подстроки?
Сложность для StringBuilder.subSequence(int start, int end)
будет примерно такой же, как для String.substring(int start, int end)
.
StringBuilder.subSequence(int, int)
фактически вызывает AbstractStringBuilder.substring(int, int)
, которыйвызывает public String(char value[], int offset, int count)
для создания результата.
String.substring(int start, int end)
использует один и тот же конструктор.
Таким образом, все методы имеют одинаковую реализацию.
Работа выполняется встроитель строк.Он использует System.arrayCopy
для копирования символов из одного буфера в другой.Таким образом, он не выполняет присваивание для каждого отдельного символа (что делает его O (n), где n - это не длина ввода, а длина подстроки), а использует высокопроизводительную системную функцию для копированияблок памяти, который намного лучше, чем O (n).