Me interesa saber si existe algún marco que implemente una colección que tenga el siguiente comportamiento.Colección de Java para permitir agregar y eliminar al iterar
Supongamos que inicialmente contiene: [1, 2, 3]
- I iterar (usando un iterador) y el elemento 2 alcance, ahora añado 4 hasta el final (la colección será ahora ser [1, 2, 3, 4]).
- ahora crear un nuevo iterador e iterar la colección, lo que resulta en [1, 2, 3, 4]
- sigo la iteración con el primer iterador y me dará sólo 3 y volver
- ahora restablecer el primer iterador me dará [1, 2, 3, 4] (similar a crear uno nuevo).
Lo mismo debe aplicarse para la eliminación de elementos. Si elimino 3 en lugar de agregar, el segundo iterador debería darme [1, 2] mientras que el primero me dará 3 y el final.
Así que cuando llegue y iterador que yo quiero que me dé la colección que tenía cuando creé el iterador (incluso si iterar más tarde, en la I iterar un poco y continuar en otro momento), cuando se restablece la iterator, obtiene basura recolectada, se actualizará a las últimas versiones y debería poder tener múltiples instancias de iterador creadas en diferentes momentos que darán diferentes versiones dependiendo del contenido de la matriz cuando se creó el iterador.
Lo necesitaría para funcionar bien con múltiples hilos y preferible tener una implementación eficiente.
¿Alguien sabe de alguna implementación de dicha colección, o tengo que implementarla yo mismo?
¿Crea una nueva copia de la colección en cambio (internamente)? ¿O se implementa de una manera más eficiente? – Razvi
Sí, tal como se describe en javadoc: "todas las operaciones mutativas (agregar, establecer, etc.) se implementan haciendo una copia nueva de la matriz subyacente". – assylias
El comportamiento se parece a lo que necesito. Pero la colección tendrá bastantes elementos. Los iteradores se crean con frecuencia en él, pero creo que los cambios son más raros (por lo que las copias en el cambio pueden no generar demasiada pérdida de rendimiento). – Razvi