Я обычно использую векторы / массивы, хэш-карты / древовидные карты и другие java-коллекции как взаимозаменяемые, за исключением того факта, что иногда есть функциональные требования к API (например, я мог бы в некоторых случаях требуется отсортированный набор данных).
Однако в последнее время я обнаружил необходимость довести производительность Java до предела для некоторых алгоритмов, которые я использую.
Есть ли набор руководящих принципов для высокого уровня структуры данных о производительности, которые я могу использовать в качестве основных правил для моего кодирования?
Я ищу для общих правил, но в этом контексте также могут быть очень полезны ответы на следующие вопросы:
1) Когда мне следует использовать многомерные массивы вместо вложенных коллекций?
2) Векторы vs.ArrayLists - действительно ли разница в производительности?
3) Имеют ли API-интерфейсы коллекций, такие как коллекции Google, трюки Java (такие как отражение и приведение) и другие распространенные идиомы Java-разработчиков, замедляют работу JVM, когда она находится под большой нагрузкой?
4) Замедляют ли примитивы по сравнению с обычными объектами (например, двойные или двойные) JVM при выполнении большого количества вычислений?
5) Существуют ли другие важные рекомендации по работе с большими коллекциями в java-программах, которые должны быть высокопроизводительными?