Dupliquer possible:
Empêcher les entrées en double dans une liste
J’ai un aryliste d’une classe particulière C.
List myList = new ArrayList();
La classe C a deux atsortingbuts à savoir.
Ssortingng str1; Ssortingng str2;
Maintenant, au fur et à mesure que j’ajoute des objects de type C à la listeArrayList, je veux vérifier s’il existe déjà un object dans la liste avec les valeurs de str1 et str2 correspondant aux valeurs des parameters (str1 et str2) de l’object. Je suis sur le point d’append.
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 parameters?
Vous devez remplacer la méthode equals
en 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 object égal.
Ceci n’a pas été testé, vous souhaiterez peut-être un traitement supplémentaire des erreurs.
Si vous substituez la méthode equals à cette méthode, vous devez également vous assurer de remplacer 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, bien que vous deviez toujours écraser la méthode equals / hashcode pour que l’exemple ci-dessus soit utilisé au mieux avec la réponse de Karthiks ci-dessus.
Lorsque vous devez vérifier les doublons ou garantir des valeurs uniques, envisagez d’utiliser une structure de données semblable à un ensemble plutôt qu’une liste.
Vous pouvez choisir l’un des choix ci-dessous –
HashSet
TreeSet
Définir automatiquement n’autorise que des valeurs uniques. Les tentatives pour append des valeurs qui existaient auparavant échoueront.
Notez que pour que cela fonctionne, vous devrez remplacer equals
et hashcode
pour indiquer au Set
comment comparer vos objects. Cette étape est mieux expliquée à Quels problèmes faut-il prendre en compte lors de la substitution d’égaux et de hashCode en Java?
if (yourList.contains(Object object)) { // do not add }