У меня есть конкретное использование HashMap
, где он просто хранит несколько записей (обычно менее 5-10) для ключей String
. Мне просто нужно добавлять записи, получать их по ключевым словам, а иногда итерировать набор записей. Записи никогда не удаляются в течение срока действия карты. У меня есть некоторая операция, когда 5-6 таких меньших карт необходимы и распределяются каждый раз при использовании одного пользователя, то есть в запросе.Оптимизированная Java-карта/Словарь для небольшого количества записей без удаления
Я использую HashMap
для этого. Однако, интересно, есть ли более оптимизированная реализация Map-подобной структуры, которую я мог бы использовать для этого? Например, тот, который будет выделять меньше места и может быть быстрее для небольшого количества элементов. Или HashMap
просто достаточно хорош?
Обратите внимание, что я не настаиваю, чтобы следовать за интерфейсом Map
.
Моих мысли идут в направление массива спинок карты, что-то вроде этой реализации, что привлекло мое внимание от JetBrains: SmartFMap (непреложной карты оптимизированы для хранения нескольких записей с относительно редких обновлений, как они говорят).
Кто-нибудь знает о таких альтернативных реализациях, которые были бы хорошими заменами HashMap
?
ADDON
Моя первоначальная идея заключается в том, что сказал @Evgeniy Дорофеев в своем ответе, чтобы иметь отсортированный массив записей и использовать бинарный поиск, но с следующей модификацией. Поскольку мне нужно добавить элементы в эту коллекцию и предотвратить повторное создание массива, я думал об использовании массива с некоторыми пустым пространством. Первый элемент добавляется, например, в середине массива, второй элемент добавляется в середине оставшейся половины (ниже или ниже, в зависимости от порядка сортировки). Если начальный размер такого массива хорош, мы можем (в основном) предотвратить воссоздание этого массива и по-прежнему иметь возможность бинарного/радиального поиска.
Почему вы хотите микро-оптимизацию, если у вас нет более 10 предметов. если вы не имеете дело с миллионами записей данных, то, что вы думаете, не достойно. это может даже не помочь вам получить оптимизацию 1ns – Reddy
Для меня это весело, сложно, и я мог бы узнать что-то новое. Мне нравится задавать вопросы по умолчанию. И если я нахожу код, который быстрее на 1ns и занимает 1 байт меньше памяти, я пойду с ним - вот только я :) – igr