Me gustaría encontrar y reutilizar (si es posible) una implementación mapa que tiene los siguientes atributos:adaptativos Mapas en Scala (o Java) Preservar la Orden de Inserción
Mientras que el número de entradas es pequeño, digamos < 32, el almacenamiento subyacente debe realizarse en una matriz como esta [clave0, val0, clave1, val1, ...] Este esquema de almacenamiento evita muchos objetos de Entrada pequeños y proporciona búsquedas extremadamente rápidas (¡incluso si son escaneos secuenciales!) en las CPU modernas debido a que la memoria caché de la CPU no se invalida y la falta de direccionamiento indirecto de los punteros se convierte en un montón.
El mapa debe mantener el orden de inserción de pares clave/valor, independientemente del número de entradas similares a LinkedHashMap
Estamos trabajando en una representación en memoria de enormes (millones de nodos/bordes) Los gráficos en Scala y tener dicho mapa nos permitirían almacenar atributos Node/Edge y Edges por nodo de una manera mucho más eficiente para el 99% + de Nodos y Bordes que tienen pocos atributos o vecinos mientras preservamos el orden cronológico de inserción para ambos atributos y bordes.
Si alguien sabe de un mapa de Scala o Java con tales características estaría muy agradecido.
Gracias
Como referencia, estoy notando que el OP no encontró satisfactoria mi solución y solicité que la eliminara. En resumen, la idea era colocar todo en arreglos indexados, al estilo de Fortran, pero luego escribir bonitos envoltorios alrededor de esta estructura para que fuera agradable tratar con ellos. La ventaja de este método es que es increíblemente rápido (debido principalmente al uso primitivo) y preserva naturalmente el orden de inserción (porque solo agrega 1 a su índice cuando necesita una nueva entrada). Mucho trabajo gráfico en Fortran y C se ha hecho de esta manera, pero estoy de acuerdo en que no he identificado el mapa deseado. –
Dado que ya está pensando en la implementación, ¿por qué no escribe la suya? No puede ser tan difícil escribir un contenedor alrededor de una matriz o un LinkedHashMap. – starblue
Usted está utilizando su colección para un caso especial. por lo tanto, no debería molestarse en una forma de ahorro tan normal. sería interesante crear su propia datastrukture, para obtener un mayor rendimiento. puedes optimizar tu estructura para tu caso, porque parece que sabes mucho de tu gráfica. así que debes pensar en árboles, listas, lo que sea, para obtener el mayor rendimiento posible. tal vez obtengas un rendimiento runtine de O (n * logn) o menos ...;) –