Я знаю, что это старый вопрос, но, возможно, кто-то может добавить дополнительные идеи.
NB: Следующее действительно имеет смысл только для определенного подмножества вариантов использования:
Если требование включает в себя сильно перекрывающиеся наборы ключей (в крайнем случае один и тот же набор ключей для всех карт), то очень эффективным решением может быть "экстернализация" ключей что касается карт, и карты содержат только значения в массиве.
Реализация не должна зависеть «структурно» от фактора перекрытия, но моя работает лучше, чем больше перекрываются ключи. Как и следовало ожидать.
Я не могу дать точных сведений о своей реализации, но важно иметь подходящий механизм для преобразования ключей (хранящихся вне вашего объекта карты) в индексы в массив значений, а также позволяя массиву значений оставаться компактным em>, т.е. иметь длину пять, если ваша карта содержит пять отображений.
Скажем, ключи для всех таких карт находятся на отдельной карте, сопоставленной с числами. Затем нужно найти способ связать числа и индексы массива.
Извините, если это недостаточно конкретно, но я подумал, что идея интересна и проста одновременно, и ее можно использовать в качестве альтернативного направления в разработке карты с эффективным использованием памяти.
Опять же, он по своей природе подходит для случаев использования с высоким «ключевым перекрытием», но сам по себе является универсальным. Могут возникнуть проблемы с производительностью, если перекрытие слишком низкое, в зависимости от деталей реализации.
person
almondandapricot
schedule
01.07.2014
size(для содержимого массива). Это наименьшее использование памяти, которое вы можете получить, если только вы не хотите работать непосредственно с массивом, используя только статические методы, которые сэкономят вам еще 16 байтов на карту. Но в этом случае это уже не будет реализацией интерфейсаMap. - person Roland Illig   schedule 15.05.2010