114 votes

Java : Détecter les doublons dans ArrayList ?

Comment pourrais-je détecter (en retournant vrai/faux) si une ArrayList contient plus d'un élément identique en Java ?

Merci beaucoup, Terry

Modifier J'ai oublié de préciser que je ne cherche pas à comparer les "Blocs" entre eux mais leurs valeurs entières. Chaque "bloc" a un int et c'est ce qui les rend différents. Je trouve l'int d'un bloc particulier en appelant une méthode nommée "getNum" (par exemple, table1[0][2].getNum() ;

1voto

Ashana.Jackol Points 1790

La meilleure façon de traiter ce problème est d'utiliser une HashSet :

ArrayList<String> listGroupCode = new ArrayList<>();
listGroupCode.add("A");
listGroupCode.add("A");
listGroupCode.add("B");
listGroupCode.add("C");
HashSet<String> set = new HashSet<>(listGroupCode);
ArrayList<String> result = new ArrayList<>(set);

Il suffit d'imprimer résultat arraylist et voyez le résultat sans doublons :)

1voto

grant Points 621

Cette réponse est rédigée en Kotlin, mais peut facilement être traduite en Java.

Si la taille de votre liste de tableaux est comprise dans une petite plage fixe, c'est une excellente solution.

var duplicateDetected = false
    if(arrList.size > 1){
        for(i in 0 until arrList.size){
            for(j in 0 until arrList.size){
                if(i != j && arrList.get(i) == arrList.get(j)){
                    duplicateDetected = true
                }
            }
        }
    }

1voto

Ketan Ramani Points 541
private boolean isDuplicate() {
    for (int i = 0; i < arrayList.size(); i++) {
        for (int j = i + 1; j < arrayList.size(); j++) {
            if (arrayList.get(i).getName().trim().equalsIgnoreCase(arrayList.get(j).getName().trim())) {
                return true;
            }
        }
    }

    return false;
}

0voto

mP. Points 7516

La vraie réponse est d'apprendre ce que sont réellement les différents types de collections.

  • Liste - ordonnée, null is ok, duplicates ok
  • Ensemble - peut être ordonné, null peut être accepté, les doublons ne sont pas acceptés.

Pour en être sûr, lisez la Javadoc et apprenez ce que sont les files d'attente et tous les autres types.

0voto

Amitesh Jha Points 1
    String tempVal = null;
    for (int i = 0; i < l.size(); i++) {
        tempVal = l.get(i); //take the ith object out of list
        while (l.contains(tempVal)) {
            l.remove(tempVal); //remove all matching entries
        }
        l.add(tempVal); //at last add one entry
    }

Remarque : cela aura un impact majeur sur les performances, car les éléments sont retirés du début de la liste. Pour résoudre ce problème, nous avons deux options. 1) Itérer dans l'ordre inverse et supprimer les éléments. 2) Utiliser LinkedList au lieu de ArrayList. En raison des questions biaisées posées dans les entretiens pour supprimer les doublons d'une liste sans utiliser d'autre collection, l'exemple ci-dessus est la réponse. Dans le monde réel cependant, si je dois réaliser cela, je mettrai les éléments de la liste dans un ensemble, simple !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X