J'ai une liste d'objets dire, Liste. La classe Entity a une méthode equals, sur quelques attributs (règle métier) pour différencier un objet Entity de l'autre.Meilleur pour la liste structure de données d'objets fréquemment sollicités
La tâche que nous portons habituellement sur cette liste est de supprimer tous les doublons quelque chose comme ceci:
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);
}
}
Maintenant, le problème que j'ai observé est que cette partie du code, ralentit vers le bas considérablement dès que la liste a des objets plus de 10000.Je comprends arraylist fait une recherche (N).
Y at-il une alternative plus rapide, utiliser HashMap n'est pas une option, parce que l'unicité de l'entité est construite sur 4 de ses attributs ensemble, il serait fastidieux de mettre la clé elle-même dans la carte? va trier définir l'aide dans l'interrogation plus rapide?
Merci
Mis à jour ma réponse, j'espère que cela vous sera utile. –
Autre remarque mineure: Si votre 'lstEntities' est normalement très grand, vous devriez envisager de faire' new ArrayList (int) 'avec une estimation raisonnable de la taille de la liste. Cela empêchera votre 'ArrayList' d'avoir à réaffecter la mémoire tout le temps. Je crois que 'new ArrayList()' par défaut n'est que de 32 éléments de taille, donc il y aura beaucoup de redimensionnement et de copie si votre liste 'noDuplicates' devient grosse. –