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