Je suis novice à Java. J'ai une ArrayList
et je veux éviter les doublons lors de l'insertion. Ma ArrayList
est
ArrayList<kar> karList = new ArrayList<kar>();
et le champ que je veux vérifier est:
kar.getinsertkar().
J'ai lu que je pouvais utiliser HashSet
ou HashMap
mais je n'en ai aucune idée.
Lorsque vous souhaitez éviter les doublons, vous souhaitez utiliser une variable Set
.
Dans ce cas, un HashSet serait parfait pour vous.
HashSet karSet = new HashSet();
karSet.add(foo);
karSet.add(bar);
karSet.add(foo);
System.out.println(karSet.size());
//Output is 2
Par souci d'exhaustivité, je vous suggérerais également d'utiliser la version générique (paramétrée) de la classe, en supposant que Java 5 ou supérieur.
HashSet<String> stringSet = new HashSet<String>();
HashSet<Integer> intSet = new HashSet<Integer>();
...etc...
Cela vous donnera également une certaine sécurité pour insérer des articles dans votre ensemble.
Utilisez une HashSet
au lieu d'une ArrayList
. Toutefois, pour que la variable HashSet
fonctionne réellement correctement, vous devez redéfinir les méthodes equals()
et hashCode()
de la classe/des objets insérés dans la variable HashSet
.
Exemple d'ennemi:
Set<MyObject> set = new HashSet<MyObject>();
set.add(foo);
set.add(bar);
public class MyObject {
@Override
public boolean equals(Object obj) {
if (obj instanceof MyObject)
return (this.id = obj.id)
else
return false;
}
// now override hashCode()
}
Veuillez vous référer à la documentation suivante pour remplacer hashCode()
et equals()
.
Un ensemble est simplement une collection qui ne peut contenir aucun doublon, ce qui en fait un son parfait pour vous.
C'est aussi très simple à mettre en œuvre. Par exemple:
Set<String> mySet = new HashSet<String>();
Cela vous fournirait un ensemble pouvant contenir des objets de type String.
Ajouter à l'ensemble est aussi simple:
mySet.add("My first entry!");
Par définition, vous pouvez ajouter ce que vous voulez et ne jamais tomber sur un doublon.
S'amuser!
EDIT: Si vous décidez de ne pas utiliser d'ArrayList, il est simple de voir si un objet est déjà dans la liste avant de l'ajouter. Par exemple:
public void addToList(String newEntry){
if(!myList.contains(newEntry))
myList.add(newEntry);
}
Remarque: Tous mes exemples supposent que vous utilisez des objets String, mais ils peuvent facilement être échangés contre tout autre type d'objet.
Vous pouvez utiliser LinkedHashSet
pour éviter les éléments en double et conserver l'ordre d'insertion.
http://docs.Oracle.com/javase/7/docs/api/Java/util/LinkedHashSet.html
Vous devez utiliser n’importe quelle implémentation de Set
, par exemple vous pouvez utiliser HashSet
. Si vous voulez add
objet personnalisé kar
dans votre HashSet
, vous besoin de override
equals
et hashcode
, méthode . Vous pouvez en savoir plus sur equals
et hashcode
, voir
Vous pouvez implémenter votre propre liste qui étend LinkedList et remplacer ses méthodes add: