Мне было интересно, какой метод быстрее всего разделить положительное число на его цифры в Java: строка против модуля
public static ArrayList<Integer> splitViaString(long number) {
ArrayList<Integer> result = new ArrayList<>();
String s = Long.toString(number);
for (int i = 0; i < s.length(); i++) {
result.add(s.charAt(i) - '0');
}
return result; // MSD at start of list
}
против
public static ArrayList<Integer> splitViaModulo(long number) {
ArrayList<Integer> result = new ArrayList<>();
while (number > 0) {
int digit = (int) (number % 10);
result.add(digit);
number /= 10;
}
return result; // LSD at start of list
}
Проверка каждого метода путем передачи Long.MAX_VALUE
10 000 000 раз, строковая версия заняла 2,090 секунды, а по модулю - 2,334 секунды.(Oracle Java 8 на 64-битной Ubuntu, работающей в Eclipse Neon)
Так что, на самом деле, ничего особенного, но я был немного удивлен, что String был быстрее