У меня есть программа, работающая с огромными наборами данных. Объекты лучше всего хранить в хэш-контейнерах, поскольку программа продолжает искать объекты в контейнере.Java: HashSet против HashMap
Первой идеей было использование HashMap, поскольку методы получения и удаления этого контейнера более подходят для использования, которое мне нужно.
Но я пришел, чтобы увидеть использование HashMap довольно расходная память, которая является одной из основных проблем, поэтому я думал, что переход на HashSet будет лучше, потому что он использует только <E>
, а не <K,V>
на элемент, но когда я посмотрел на реализация, которую я изучил, использует базовый HashMap! это означает, что он не спасет память!
Так что это мои вопросы:
- ли все мои предположения верно?
- Является ли память HashMap расточительной? более конкретно, каковы его накладные расходы для каждой записи?
- Является ли HashSet столь же расточительным, как HashMap?
Есть ли другие контейнеры на основе хэша, которые будут значительно меньше расходных материалов для памяти?
обновление
В соответствии с просьбой в комментариях я продлю немного по моей программе, HashMap предназначена для хранения пары других объектов, а также некоторое числовое значения - в float- вычисленный из их. по пути он извлекает некоторые из них и вводит новые пары. Для пары необходимо, чтобы она не удерживала эту пару или удаляла ее. Отображение может быть выполнено с использованием значения float или hashCode
парного объекта.
Кроме того, когда я говорю «огромные наборы данных» Я говорю о ~ 4 * 10^9 объектов
Каковы ваши предположения? – SMA
* Это серьезная проблема *: не так ли? Вы измерили и доказали, что использование HashSet в вашей утилите потребляет слишком много памяти? Что такое прецедент? –
@almasshaikh Мои предположения - все, что написано в моем посте, и, в частности, следующие вопросы ... – petric