Tengo una lista de objetos, por ejemplo, Lista. La clase Entity tiene un método igual, en pocos atributos (regla comercial) para diferenciar un objeto Entity del otro.La mejor estructura de datos para la lista de objetos que se consulta con frecuencia
La tarea que suelen llevar a cabo en esta lista es eliminar todas las copias o menos así:
List<Entity> noDuplicates = new ArrayList<Entity>();
for(Entity entity: lstEntities)
{
int indexOf = noDuplicates.indexOf(entity);
if(indexOf >= 0)
{
noDuplicates.get(indexOf).merge(entity);
}
else
{
noDuplicates.add(entity);
}
}
Ahora, el problema que he estado observando es que esta parte del código, se está desacelerando desciende considerablemente tan pronto como la lista tenga objetos de más de 10000. Entiendo que el arraylista está haciendo una búsqueda de ao (N).
¿Existe una alternativa más rápida, el uso de HashMap no es una opción, porque la singularidad de la entidad se basa en 4 de sus atributos en conjunto, sería tedioso introducir la clave en el mapa? ordenará set help en consultas más rápidas?
Gracias
He actualizado mi respuesta, espero que sea de ayuda para usted. –
Otra nota menor: si su 'lstEntities' es normalmente muy grande, debería considerar hacer' new ArrayList (int) 'con una conjetura razonablemente grande sobre qué tan grande será la lista. Esto evitará que su 'ArrayList' tenga que reasignar la memoria todo el tiempo. Creo que 'new ArrayList()' tiene un valor predeterminado de 32 elementos, por lo que se MUCHOS ajustes y copias si su lista 'noDuplicates' aumenta. –