Вопрос

Мне нужно хранить большое количество Long ценности в SortedSet реализация космическим образом. Я рассматривал битовые реализации и обнаружил Javaewah. Анкет Однако API ожидает int ценности, а не longс

Может ли кто -нибудь порекомендовать какие -либо альтернативы или предложить хороший способ решить эту проблему? В основном я обеспокоен эффективностью пространства. После строительства набора мне нужно будет получить доступ к минимальному и максимальному элементу один раз. Тем не менее, время доступа не является огромной проблемой (т.е. так хорошо будет внедренная реализация длиной длины прогона).

РЕДАКТИРОВАТЬ

Я должен ясно, что реализация не должны реализовать SortedSet Интерфейс, предоставляя я могу получить доступ к минимальным и максимальным элементам коллекции.

Это было полезно?

Решение

Вы можете использовать tlongarraylist, который использует long[] под. Он поддерживает sort() Таким образом, мин и Макс станут первым и последним значением.

Или вы можете использовать long[] с длиной и сделай это самостоятельно. ;)

Это будет использовать примерно на 64 байта больше, чем сами необработанные ценности. Вы можете стать более компактным, если вы можете сделать некоторые предположения о диапазоне длинных значений. например, если они на самом деле ограничены 48-битными.

Вы можете рассмотреть возможность использования Longbuffer. Если это отображается память, она избегает использования кучи или прямой памяти, но вы бы самостоятельно реализовали бы сортировку.


Если они кластеризованы, вы можете представлять данные как набор диапазонов. Диапазоны могут быть чистым a - b или битсет с стартовым значением. Позднее хорошо работает для телефонов. ;)

Другие советы

Не уверен, что это установлено или насколько эффективно сравнивается с обычным JCF, но посмотрите на это:

http://commons.apache.org/primitives/

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top