Вот две возможности.
В обоих следующих предложениях одна вещь - хранить несколько пар вместе как тройные int
с в int[]
.Первый int
будет int
, а следующие два int
будут верхней и нижней половиной long
.
Если вы не возражаете против 33% -ного дополнительного недостатка пространстваВ обмен на преимущество в скорости адресации вы могли бы вместо этого использовать long[]
и хранить int
и long
в отдельных индексах.
Вы никогда не вызовете метод equals
.Вы бы просто сравнили три int
с тремя другими int
, что было бы очень быстро.Вы бы никогда не вызвали compareTo
метод.Вы просто сделали бы пользовательское лексикографическое сравнение трех int
с, которое было бы очень быстрым.
B * tree
Если использование памяти является максимальнымВы можете создать дерево B *, используя int[][]
или ArrayList<int[]>
.B * деревья относительно быстрые и достаточно компактные.
Существуют и другие типы B-деревьев, которые могут быть более подходящими для вашего конкретного случая использования.
Пользовательский хешset
Вы также можете реализовать пользовательский хэш-набор с пользовательской быстро вычисляемой хэш-функцией (возможно, XOR для int
и верхней и нижней половин long
вместе, что будет очень быстро)вместо того, чтобы полагаться на метод hashCode
.
Вы должны выяснить, как реализовать сегменты int[]
для наилучшего соответствия производительности вашего приложения.Например, как вы хотите преобразовать свой хэш-код в номер корзины?Вы хотите перегруппировать все, когда корзины начинают получать слишком много элементов?И так далее.