Я только что провёл несколько тестов, так как меня интересовало, каким будет самый быстрый способ.
Я использовал 4 разных метода, каждый раз 1 000 000 (1 миллион) раз для правильной оценки.
Примечание:
- ArrayList был заполнен 2710 символами,
- вводом была какая-то случайная строка json, вокруг которой я лежал,
- мой компьютер не самый сильный (процессор: AMD Phenom II X4 955 @ 3,20 ГГц).
1) Преобразовать в массив, затем в строку (ответ адарша)
char[] cs = new char[chars.size()];
for(int x = 0; x < cs.length; x++){
cs[x] = chars.get(x);
}
String output = new String(cs);
Время: 7716056685 наносекунд или ~ 7,7 секунд / индекс: 1
2) Используйте StringBuilder С предопределенным размером для сбора каждого символа (ответ Шона Оуэна)
StringBuilder result = new StringBuilder(chars.size());
for(Character c : chars){
result.append(c);
}
String output = result.toString();
Время: 77324811970 наносекунд или ~ 77,3 секунд / индекс: ~ 10
3) Используйте StringBuilder БЕЗ предопределенного размера для сбора каждого символа
StringBuilder result = new StringBuilder();
for(Character c : chars){
result.append(c);
}
String output = result.toString();
Время: 87704351396 наносекунд или ~ 87,7 секунд / индекс: ~ 11,34
4) Создайте и очистите строку и просто + = каждый персонаж (ответ Джонатана Гранди)
String output = "";
for(int x = 0; x < cs.length; x++){
output += chars.get(x);
}
Время: 4387283410400 наносекунд или ~ 4387,3 секунд / индекс: ~ 568,59
Я действительно должен был уменьшить это. Этот метод был запущен только 10000 раз, что уже заняло ~ 43 секунды, я просто умножил результат на 100, чтобы получить приближение 1.000.000 прогонов
Conclussion:
Используйте метод "Преобразовать в массив, затем в строку" ... это быстро ... С другой стороны, я бы не подумал, что операция + = будет такой медленной ...
Как я тестировал:
final String jsonExample = new String("/* Random Json String here */");
final char[] charsARRAY = jsonExample.toCharArray();
final ArrayList<Character> chars = new ArrayList<Character>();
for(int i = 0; i < charsARRAY.length; i++){
chars.add(charsARRAY[i]);
}
final long time1, time2;
final int amount = 1000000;
time1 = System.nanoTime();
for(int i = 0; i < amount; i++){
// Test method here
}
time2 = System.nanoTime();