Específicamente necesito una colección que utiliza un campo A para acceder y uno diferente (campo S) para ordenar pero una colección ordenada que acepta duplicados Ser suficiente.Java: colección ordenada que permite duplicados, es eficiente desde el punto de vista de la memoria y proporciona inserción rápida + actualización
A menudo llego a este punto en el que necesito exactamente esta colección y TreeMap no es una opción, ya que no permite duplicados. Entonces ahora es el momento de preguntar aquí. Hay varias soluciones como señaló en StackOverflow here y here - es decir, existen:
- PriorityQueue: actualización lenta (remove (Object) + añadir (Objeto)), y el boxeo de llaves primitivos
- Fibonacci montón: (?) de residuos de memoria
TreeMap<Field_S, List<Value>>
: problema para mí es la sobrecarga de la memoria de la lista, y el boxeo de llaves primitivos- lista o matriz ordenada: el problema es la inserción y eliminación lenta -> ¿Debería implementar una lista ordenada segmentada?
- TreeMultimap de guayaba (docs): (?) La dependencia externa y probablemente ineficaz memoria
Cualquier persona con mejores sugerencias? ¿O debería implementar mi propia estructura de datos (¿cuál?)? También otras fuentes (en Java, código abierto, con pruebas unitarias y pequeñas deps) serían agradables.
actualización
Más detalles en mi caso de uso en el momento (a pesar de que estoy teniendo una solicitud similar en el último momento). Tengo una colección (con millones) de las referencias en el que necesito para poder
- al voto u obtener el elemento más pequeño en relación con el campo S
- y actualización de campo S con la ayuda de campo A
- valores idénticos del campo S puede suceder. el campo A es en realidad un entero que apunta a otra matriz
- la única dependencia que deseo es trove4j. Podría usar una colección diferente como la de mahout si fuera necesario. Pero no es guayaba, aunque es una buena lib, las colecciones no están ajustadas para ser eficientes en memoria (boxeo/unboxing).
Así que llora por un montón de Fibonacci, pero me temo que tiene demasiados gastos indirectos por elemento -> esa fue la razón por la que pensé en una forma más eficiente de la memoria "ordenados + matriz segmentada" solución.
¿Cuál fue el problema con el uso de guava 'TreeMultiset'? – vainolo
@vainolo Dependencia Externa según la observación del OP. – gtgaxiola
Podría ser útil - hoja de trucos de complejidad: http://bigocheatsheet.com/ –