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 longs.

¿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.

¿Fue útil?

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:

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top