IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

[array] enlever les doublons


Sujet :

Collection et Stream Java

  1. #1
    FFF
    FFF est déconnecté
    Membre actif Avatar de FFF
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 342
    Points : 282
    Points
    282
    Par défaut [array] enlever les doublons
    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..

  2. #2
    Membre actif Avatar de vincent63
    Inscrit en
    Octobre 2005
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 198
    Points : 205
    Points
    205
    Par défaut
    'jour,
    Il faut utiliser un ensemble, c'est à dire un set.
    Voilà un petit bout de code exemple :
    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);
    et le résultat après exécution:
    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]
    On a bien perdu les doublons

  3. #3
    Membre actif Avatar de keil
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 261
    Points : 214
    Points
    214
    Par défaut
    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

  4. #4
    Membre actif Avatar de keil
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 261
    Points : 214
    Points
    214
    Par défaut
    la rep de vincent63 a l'air bien plus simple quand meme

  5. #5
    Membre actif Avatar de vincent63
    Inscrit en
    Octobre 2005
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 198
    Points : 205
    Points
    205
    Par défaut
    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

  6. #6
    FFF
    FFF est déconnecté
    Membre actif Avatar de FFF
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 342
    Points : 282
    Points
    282
    Par défaut
    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.

  7. #7
    Membre actif Avatar de vincent63
    Inscrit en
    Octobre 2005
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 198
    Points : 205
    Points
    205
    Par défaut
    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 :
    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]);
    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.

    Enfin là à froid et vu l'heure, j'ai pas mieux à te proposer désolé

  8. #8
    FFF
    FFF est déconnecté
    Membre actif Avatar de FFF
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 342
    Points : 282
    Points
    282
    Par défaut
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [ArrayList] Enlever les doublons
    Par GLDavid dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 13/05/2012, 02h43
  2. une fonction pour enlever les doublons d'un array
    Par secteur_52 dans le forum Delphi
    Réponses: 1
    Dernier message: 27/06/2006, 13h45
  3. Requête : enlever les doublons
    Par Metallic-84s dans le forum Requêtes
    Réponses: 3
    Dernier message: 02/03/2006, 20h34
  4. Enlever les doublons en fonction de la date
    Par nicko5959 dans le forum Access
    Réponses: 2
    Dernier message: 10/01/2006, 14h13
  5. [SQL] Enlever les doublons par rapport a une colonne
    Par irenee dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/12/2005, 19h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo