Question

J'ai besoin de stocker un grand nombre de valeurs de Long dans une mise en œuvre de SortedSet de manière efficace l'espace. Je considérais les implémentations bits ensemble et découvert Javaewah . Cependant, l'API des valeurs int attend plutôt que longs.

Quelqu'un peut-il recommander des solutions de rechange ou suggérer une bonne façon de résoudre ce problème? Je me préoccupe surtout de l'efficacité de l'espace. Lors de la construction de l'ensemble je besoin d'accéder à l'élément minimum et maximum une fois. Cependant, le temps d'accès est une grande préoccupation (à savoir si une mise en œuvre codée entièrement à longueur sera bien).

EDIT

Je devrait être clair que la mise en œuvre n'a pas à mettre en œuvre la SortedSet interface fournissant je peux accéder aux éléments minimum et maximum de la collection.

Était-ce utile?

La solution

Vous pouvez utiliser TLongArrayList qui utilise un sous de long[]. Il prend en charge sort() de sorte que le minimum et maximum sera la première et la dernière valeur.

Ou vous pouvez utiliser un long[] avec une longueur et faire vous-même. ;)

utilisera environ 64 octets de plus que les valeurs brutes elles-mêmes. Vous pouvez obtenir plus compact si vous pouvez faire des hypothèses sur la plage de valeurs longues. par exemple. si elles sont effectivement limités à 48 bits.

Vous pouvez envisager d'utiliser LongBuffer. Si elle est la mémoire mappée il évite d'utiliser tas ou direct à la mémoire, mais vous auriez mettre en œuvre une routine de tri vous-même.


S'ils sont regroupés, vous pourriez être en mesure de représenter les données comme un ensemble de gammes. Les gammes peuvent être un pur A - B, ou un BitSet avec une valeur de départ. Les travaux plus tard bien pour les numéros de téléphone. ;)

Autres conseils

Je ne sais pas si elle a réglé ou comment il est efficace par rapport à JCF régulière, mais jetez un oeil à ceci:

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top