Я сделал некоторое профилирование по моему приложению, и один из результатов показал, что около 18% памяти в куче используется объектами типа Double. Оказывается, эти объекты являются значениями в Map s, где я не могу использовать примитивный тип.
Мое рассуждение состоит в том, что примитивный тип Double потребляет меньше памяти, чем объект Double. Есть ли способ иметь такую карту, как структура данных, которая принимала бы любой тип в качестве ключа и примитивный Double как значения?
Основные операции:
- (возможно, только один раз)
- Поиск (содержит ключ)
- Повторное (по ключу)
- Итерация
Типичные карты, которые у меня есть:
-
HashMap<T, HashMap<NodeData<T>, Double>> graph -
HashMap<Point2D, Boolean> onSea(хотя и не двойное значение) -
ConcurrentHashMap<Point2D, HashMap<Point2D, Double>>
Все, что используется с Java 8.
Добавление
Меня в основном не интересуют рамки, которые имеют решение для этих типов карт, но на то, что нужно учитывать при решении этих проблем. Если хотите, каковы концепции/идеи/подходы к любой такой структуре. Или решение может быть также на другом уровне, где карты заменяются объектами, следуя определенному шаблону, подобному @Ilmari Karonen, указанному в его ответе.