¿Hay alguna (s) clase (s) de lista de doble enlace intrusivo (bien implementadas) disponibles para Java? ¿O debería hacer lo mío? Boost lo tiene para C++: http://beta.boost.org/doc/libs/1_40_0/doc/html/boost/intrusive/list.html.Implementación de listas intrusivas para Java?
La lista intrusiva es un contenedor que tiene (en este caso) punteros siguiente y anterior dentro del elemento, por lo que las operaciones de lista típicas como reemplazar y eliminar pueden dirigirse directamente a la clase primaria en lugar de la clase contenedora. Existen ciertas situaciones en las que la lista intrusiva es la mejor solución.
Intento dar un ejemplo apropiado. Supongamos que he vinculado listas L list1 y L list2 propiedad de diferentes tipos de clases X1 e Y2.
clase Q (que no tiene nada que ver o no tiene acceso fácil a las interfaces de x1 e Y2) debe hacer i) reemplazar, ii) eliminar operación para el elemento e, que existe siempre en alguna parte, en lista1 xor list2 dependiendo del estado del tiempo de ejecución, pero esa información no se almacena directamente en ninguna parte.
Con la lista intrusiva Q solo puede almacenar la referencia a un elemento e miembro elemento e y siempre señala el lugar correcto.
De lo contrario, tiene que elegir entre varias soluciones claramente más complejas, una u otra. - Clase de contenedor para el elemento ey métodos adicionales para completar las operaciones iy ii. No.
Básicamente, la pregunta no es sobre el rendimiento sino la complejidad arquitectónica. Esto también puede entenderse como un tipo de situación de objeto compartido donde la solución IL evita la necesidad de actualización para cada cliente Lx y Q.
Tenga en cuenta que NO es necesario que necesite compatibilidad con otros contenedores estándar. Solo una implementación lsit intrusiva genérica con operaciones de iteración, adición, eliminación y búsqueda utilizadas con clase de elementos desconocidos.
Gracias.
¿Puede explicar con precisión por qué la "clásica" java.util.LinkedList no es una implementación lo suficientemente buena de LinkedList para usted? Y también por qué, por qué, preferiría no implementar la interfaz de Colección, cuando es seguro que implementarla hace que su colección sea utilizable, en lugar de un síntoma más de NIY. – Riduidel
@Riduidel. Además, desde Java 1.6, existe una excelente alternativa para 'LinkedList', llamada' ArrayDeque'. –
El principal beneficio de una lista intrusiva es que, dado un elemento en la lista, se puede eliminar en un tiempo constante. No es necesaria ninguna búsqueda porque los enlaces 'next' y' previous' están ahí en el elemento. Ver 'iterator_to' en el documento Boost vinculado. También hay algunos ahorros de memoria porque no se requiere un objeto envoltorio adicional para cada entrada en la lista. –