Frage

Ich muss eine große Anzahl von aufbewahren Long Werte in a SortedSet Implementierung auf platzeffiziente Weise. Ich überlegte Bit-Set-Implementierungen und entdeckte Javaewah. Die API erwartet jedoch int Werte und nicht longs.

Kann jemand Alternativen empfehlen oder einen guten Weg vorschlagen, um dieses Problem zu lösen? Ich befasse mich hauptsächlich mit Raumeffizienz. Beim Erstellen des Satzes muss ich einmal auf das minimale und maximale Element zugreifen. Die Zugriffszeit ist jedoch kein großes Problem (dh eine volllaufende codierte Implementierung wird in Ordnung sein).

BEARBEITEN

Ich sollte mir klar machen, dass die Implementierung muss nicht Implementieren Sie die SortedSet Schnittstelle, die ich auf die minimalen und maximalen Elemente der Sammlung zugreifen kann.

War es hilfreich?

Lösung

Sie könnten TlongArrayList verwenden, die a verwendet long[] unterhalb. Es unterstützt sort() Das Min und Max werden also der erste und letzte Wert sein.

Oder Sie könnten a verwenden long[] mit einer Länge und tun Sie dies selbst. ;))

Dies wird etwa 64 Byte mehr verwenden als die Rohwerte selbst. Sie können kompakter werden, wenn Sie einige Annahmen über den Bereich langer Werte treffen können. ZB, wenn sie tatsächlich auf 48-Bit begrenzt sind.

Sie könnten in Betracht ziehen, Longbuffer zu verwenden. Wenn es sich um einen Speicher handelt, vermeidet es die Verwendung von Heap oder direktem Speicher, aber Sie hätten selbst eine Sortierroutine implementieren.


Wenn sie zusammengeklustert sind, können Sie die Daten möglicherweise als Reihe von Bereichen darstellen. Die Bereiche könnten ein reines A - B oder ein Bitset mit einem Startwert sein. Die späteren Funktionen eignen sich gut für Telefonnummern. ;))

Andere Tipps

Ich bin mir nicht sicher, ob es festgelegt ist oder wie effizient es mit dem regulären JCF verglichen wird, aber sehen Sie sich das an:

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top