Tengo una pregunta. ¿Qué sucede cuando trato de agregar el "mismo" objeto dos veces a una ArrayList? Con "lo mismo" me refiero a un objeto de una clase individual, que se identifica como lo mismo con equals() y hashCode(). Tiene diferentes valores para la mayoría de las variables miembro y se creó a partir de hilos quizás diferentes, pero para equals() y hashCode() es el "mismo". ¿El segundo objeto reemplaza el primer objeto?ArrayList - agregue los "mismos" objetos (same => equals, hashCode), Threads
Además, ¿qué sucede si dos subprocesos intentan agregar esos objetos exactamente al mismo tiempo al ArrayList? ¿Esto es posible? Si es así, ¿qué sucede?
¡Gracias! :-)
[EDITAR] ¡Gracias por todas las respuestas! ¿Debería usar synchronizedList en lugar de utilizar "sincronizar (enumerar) {}"? -> Leí los documentos, incluso con synchronizedList, para iterar sincronizar (list) se usará
[EDIT2] ¿Se puede declarar una synchronizedList como una variable miembro? Lo intenté, pero no funcionó.
-1 Cada llamada a 'ArrayList.contains' es O (n). Esta es una manera terrible de crear una lista única. 'LinkedHashSet' es mejor para eso. –
pero al usar LinkedHashSet al acceder, debe estar sincronizado también, ¿correcto? Entonces, ¿por qué no utilizar una synchronizedList? – nano7
@ nano7, por supuesto, debe estar sincronizado. solo porque haya cambiado la colección no significa que cambie la política de sincronización. puede utilizar cualquier estructura de datos sincronizada que desee, pero si va a utilizar un 'LinkedHashSet', le recomendaría usar' synchronizedSet'. – mre