Bonjour,
je recherche une méthode efficace permettant d'enlever les doublons présent dans un tableau. J'ai essayé de faire une double boucle for, mais elles ne me les suppriment pas... Si quelqu'un a une bonne méthode, je suis preneur..
Bonjour,
je recherche une méthode efficace permettant d'enlever les doublons présent dans un tableau. J'ai essayé de faire une double boucle for, mais elles ne me les suppriment pas... Si quelqu'un a une bonne méthode, je suis preneur..
'jour,
Il faut utiliser un ensemble, c'est à dire un set.
Voilà un petit bout de code exemple :
et le résultat après exécution:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 System.err.println("Début"); ArrayList arrayList = new ArrayList(); arrayList.add("a"); arrayList.add("b"); arrayList.add("c"); arrayList.add("d"); arrayList.add("a"); System.err.println(arrayList); System.err.println("On utilise des ensembles"); Set set = new TreeSet(); set.addAll(arrayList); System.err.println(set);
On a bien perdu les doublons
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Début [a, b, c, d, a] On utilise des ensembles [a, b, c, d]
j'utiliserai une liste chainee
va = 1e valeur du tableau
faire
si va present dans liste chainee, alor passer
sinon ajout va a la liste chainee
va = va suivante
tant que va != derniere valeur du tableau
n = nombre d'element dans la liste
tab = new <type>[n]
maillon = liste chainee
pour i=0 ; i<n
tab[i] = maillon.valeur
maillon = maillon.suivant
fin de pour
la rep de vincent63 a l'air bien plus simple quand meme
En fait les collections en Java sont très puissantes.
Elles permettent de faire énormement de choses et entre autres, la gestion des doublons via des ensembles.
Le mieux (à mon avis), c'est encore d'utiliser les outils que le bon "java" a mis à notre disposition
Merci pour vos réponses.
J'ai une légère adaptation à réaliser / à ce que tu dis puisqu'en fait j'ai un tableau a 3 indices, donc le problème maintenant est de le convertir en un Vector ou ArrayList a trois dimensions.
Effectivement, le problème se complique un peu.
Dans un premier temps, il faut bien définir ce que tu appelles doublon dans un tableau à trois dimensions.
1. Pour tout i, j, k de N val = tab[i][j][k] ne doit apparaitre qu'une seule fois
2. Pour i, j, fixes et tout k de N val = tab[i][j][k] ne doit apparaitre qu'une fois (par exemple tab[1, 1, 1] = tab [1, 2, 4] est possible mais pas tab[1, 1, 1] = tab [1, 1, 4] )
3. etc... pour chaque colonne.
Une fois que tu as isolé l'ensemble sur lequel tu ne veux pas avoir de doublon, tu essaies de l'insérer dans une structure sous forme de Set.
Dans le cas 1, c'est assez facile, tu prends toutes les valeurs et tu les inséres une à une dans un Set. Du point de vu du code ca doit ressembler à un truc dans le genre de :
Dans les autres cas, la solution est assez proche mais tu devras peut-être utiliser des "Set de Set" ou trouver une astuce dans le genre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 for (int i=0; i< n1; i++) for (int j=0; j< n2; j++) for (int k=0; k<n3; k++) monSet.put(tab[i][j][k]);
Enfin là à froid et vu l'heure, j'ai pas mieux à te proposer désolé
j'espère que ça ne t'as pa empêché de dormir!
Merci encore
Dans mon cas, seulement une colonne est déterminante je dois donc obtenir un tableau tel que :
pour tout i,j, il existe un unique k tel que tab[i][j][k]
(super on fait des maths!!!!)
la difficulté c'est que c'est une tableau "relationnel" (j'invente des mots) ie, pour k fixé et pour tout i,j, tab[i][j][k] font référence à des propriétés, un peu comme la notion d'objet ex:
k =>formes
j =>longueurs des côtés
i =>surfaces...
j'ai pensé du coup à créer une class pour décrire cet objet, comme cela je met monObjet dans la arrayList et je fais un tri avancé (fo implémenter des interfaces... )!! Ca devient vraiment trop chaud, donc je revois le pb à la base=>éviter d'avoir des doublons c'est moins compliqué dans ce cas.
En tous les cas le cpde fourni plus haut me convient parfaitement dans un cas 1i donc c'est impec !
Merci.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager