Я прочитал отличную книгу Кента Бека о лучших методах кодирования (http://www.amazon.com/Implementation-Patterns/dp/B000XPRRVM). Есть также интересные показатели производительности.
В частности, существует сравнение между массивами и различными коллекциями. И массивы действительно намного быстрее (возможно, в 3 раза по сравнению с ArrayList).
Кроме того, если вы используете Double вместо double, вам нужно придерживаться его и не использовать double, так как автоматический (не) бокс убьет вашу производительность.
Учитывая ваши требования к производительности, я бы придерживался массива примитивного типа .
Более того, я бы рассчитал только один раз верхнюю границу для условия в циклах.
Обычно это делается строкой перед циклом.
Однако, если вам не нравится, что переменная верхней границы, используемая только в цикле, доступна вне цикла, вы можете воспользоваться фазой инициализации цикла for следующим образом:
for (int i=0, max=list.size(); i<max; i++) {
// do something
}
Я не верю в устаревание массивов в Java. Для цикла, критичного к производительности, я не вижу, чтобы какой-либо конструктор языков убрал самый быстрый вариант (особенно, если разница равна x3).
Я понимаю ваше беспокойство по поводу ремонтопригодности и согласованности с остальной частью приложения. Но я считаю, что критический цикл имеет право на некоторые специальные практики.
Я бы постарался сделать код максимально понятным, не меняя его:
- путем осторожного опроса каждого имени переменной , в идеале с 10-минутным сеансом мозгового штурма с моими коллегами
- , написав кодирование комментариев (я против их использования в целом, поскольку неясный код следует разъяснять, а не комментировать; но критический цикл оправдывает это).
- используя приватные методы по мере необходимости (как указал Andreas_D в своем ответе). Если сделать
private final
, очень велики шансы (так как они будут короткими), что они будут встроены во время работы, поэтому не будет никакого влияния на производительность во время выполнения.