Duplicata possible:
Empêcher les entrées en double dans l'arraylist
J'ai un arraylist d'une classe particulière C.
List<C> myList = new ArrayList<C>();
La classe C a deux attributs à savoir.
String str1;
String str2;
Maintenant, au fur et à mesure que j'ajoute des objets de type C à ma liste ArrayList, je veux vérifier s'il existe déjà un objet dans la liste avec les valeurs de str1 et str2 correspondant aux valeurs des paramètres (str1 et str2) de l'objet Je suis sur le point d'ajouter.
Existe-t-il un moyen efficace de le faire sans avoir à parcourir chaque fois la liste complète et à vérifier la correspondance entre les paramètres?
Vous devez remplacer la méthode equals
dans la classe C.
par exemple.
public boolean equals(Object c) {
if(c !instanceof C) {
return false;
}
C that = (C)c;
return this.str1.equals(that.getStr1()) && this.str2.equals(that.getStr2());
}
Ensuite, vous pouvez appeler myList.contains (viz) pour voir si la liste contient déjà un objet égal.
Ceci n'est pas testé, vous voudrez peut-être une gestion supplémentaire des erreurs.
Si vous remplacez la méthode equals comme ceci, vous devez également vous assurer que vous remplacez la méthode hashcode (). Voir: http://www.technofundo.com/tech/Java/equalhash.html
Edit : Comme indiqué dans les commentaires, l'implémentation de l'ensemble sera plus efficace, mais vous devrez toujours remplacer la méthode equals/hashcode pour que le l'exemple ci-dessus peut être mieux utilisé en conjonction avec la réponse de Karthiks ci-dessus.
Lorsque vous devez rechercher des doublons ou garantir des valeurs uniques, pensez à utiliser une structure de données de type Set , plutôt qu'une liste.
Vous pouvez choisir l'une des options ci-dessous -
Définir automatiquement n'autorise que des valeurs uniques. Les tentatives d'ajout de valeurs qui existaient précédemment échoueront.
Notez que pour que cela fonctionne, vous devrez remplacer equals
et hashcode
pour indiquer au Set
comment comparer vos objets. Cette étape est mieux expliquée à Quels sont les problèmes à prendre en compte lors de la substitution d'equals et de hashCode en Java?
if (yourList.contains(Object object))
{
// do not add
}