Implementación de sortedset comprimido
-
26-10-2019 - |
Pregunta
Necesito almacenar una gran cantidad de Long
valores en un SortedSet
implementación de manera eficiente en el espacio. Estaba considerando implementaciones de bits y descubrí Javaewah. Sin embargo, la API espera int
valores en lugar de long
s.
¿Alguien puede recomendar alguna alternativa o sugerir una buena manera de resolver este problema? Estoy principalmente preocupado por la eficiencia del espacio. Al construir el conjunto, necesitaré acceder al elemento mínimo y máximo una vez. Sin embargo, el tiempo de acceso no es una gran preocupación (es decir, por lo que una implementación codificada completamente longitud de ejecución estará bien).
EDITAR
Debería estar claro que la implementación no tiene que implementar el SortedSet
interfaz siempre que pueda acceder a los elementos mínimos y máximos de la colección.
Solución
Podrías usar TlongarRayList que usa un long[]
debajo. Es compatible sort()
Entonces, el Min y el Max serán el primer y último valor.
O podrías usar un long[]
con una longitud y haz esto tú mismo. ;)
Esto usará aproximadamente 64 bytes más que los valores en bruto. Puede obtener más compacto si puede hacer algunas suposiciones sobre el rango de valores largos. Por ejemplo, si en realidad están limitados a 48 bits.
Puede considerar usar Longbuffer. Si se trata de memoria, evita el uso de Heap o Memoria directa, pero usted usted mismo implementa una rutina de clasificación.
Si están agrupados, es posible que pueda representar los datos como un conjunto de rangos. Los rangos podrían ser una A - B pura, o un bitset con un valor inicial. El posterior funciona bien para los números de teléfono. ;)
Otros consejos
No estoy seguro si se ha establecido o cuán eficiente es en comparación con JCF normal, pero eche un vistazo a esto: