(Hay algunas preguntas acerca de matrices dispersas en tiempo eficiente pero estoy en busca de eficiencia de la memoria.)memoria eficientes en Java
necesito el equivalente de un List<T>
o Map<Integer,T>
cuales
- Puede crecer a demanda simplemente configurando una clave más grande que cualquiera que se haya encontrado anteriormente. (Puede suponer que las claves no son negativas.)
- Tiene una memoria tan eficiente como
ArrayList<T>
en el caso de que la mayoría de los índices no seannull
, es decir, cuando los datos reales no son muy escasos. - Cuando los índices son escasos, consume espacio proporcional a la cantidad de índices que no son
null
. - Utiliza menos memoria que
HashMap<Integer,T>
(ya que esto autocaptura las claves y probablemente no aprovecha el tipo de tecla escalar). - Puede obtener o establecer un elemento en el tiempo de registro (N) amortizado donde N es el número de entradas: no necesita ser tiempo lineal, la búsqueda binaria sería aceptable.
- Implementado en una biblioteca Java de código abierto no viral (preferiblemente en Maven Central).
¿Alguien conoce esta clase de utilidad?
Hubiera esperado que Commons Collections tuviera una, pero no parecía.
Me encontré con org.apache.commons.math.util.OpenIntToFieldHashMap
que parece casi correcto, excepto el tipo de valor es un FieldElement
que parece gratuito; Solo quiero T extends Object
. Parece que sería fácil editar su código fuente para que sea más genérico, aunque prefiero usar una dependencia binaria si hay una disponible.
Eso se ve bien. Intenté adaptar 'OpenIntToFieldHashMap' a un tipo de valor genérico, que parece haber funcionado con ~ 10min de trabajo, pero solo funciona marginalmente mejor que' TIntObjectMap'. –