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 :

[ArrayList] Enlever les doublons


Sujet :

Collection et Stream Java

  1. #1
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut [ArrayList] Enlever les doublons
    Bonjour

    A partir d'un fichier XML parsé, j'ai récupérer des chaînes de caractères stockées dans une ArrayList. Mais, cette ArrayList contient des doublons et je voudrais les supprimer. Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ArrayList depart2 = new ArrayList();
            i = depart.iterator();
            if (depart2.isEmpty())
                depart2.add(depart.get(0));
            while (i.hasNext()) {
                System.out.println(i.next().toString());
                if (!depart2.contains(i.next()))
                    depart2.add(i.next());
                else;
            }
    Malherueusement, je n'obtiens pas le résultat escompté et ma ArrayList depart2 ne contient pas tous les éléments.
    Où est mon erreur ?

    Merci de vos réponses

    @ ++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  2. #2
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Ca depend de ce que contient ton ArrayList.
    Dans tous les cas contains() fait appel a equals(). Peut etre peux tu essayer de reecrire la methode.
    Il me semble que par defaut, equals() teste l'egalite des pointeurs (ou references), et selon la classe teste autre chose.
    N'empeche que x.clone().equals(x); ne renverra pas toujours true !! (cf Object.clone() )

    En gros, si ton ArrayList contient des objets d'une classe a toi, il y a de fortes chances pour que tu aies besoin de reecrire equals().
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  3. #3
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    C'est bon, :trouve: , voici ma méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    private static ArrayList antiDoublon(ArrayList al) {
     
            ArrayList al2 = new ArrayList();
            for (int i=0; i<al.size(); i++) {
                Object o = al.get(i);
                if (!al2.contains(o))
                    al2.add(o);
            }
            al = null;
            return al2;
     
        }
    Si ça peut aider quelqu'un.

    @ ++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  4. #4
    Membre confirmé Avatar de Diablo_22
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2005
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2005
    Messages : 498
    Points : 490
    Points
    490
    Par défaut
    Même si je remonte un vieux topic juste pour dire car ça ma bien aidé
    N'oubliez pas la balise

    est ton ami mais quand Google ne trouve pas quelque choses, il demande à Chuck Norris.

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 84
    Points : 65
    Points
    65
    Par défaut
    voici une solution : http://www.rmouton.fr/java/38/49

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par ensemien Voir le message
    C'est vrai que je ferais plutôt comme ça. Sauf que j'utiliserais un HashSet au lieu d'un TreeSet : c'est plus rapide, plus léger et le TreeSet n'est pas utile sauf besoin exprimé d'avoir les données dans l'ordre.

    Par contre, s'il y a beaucoup de données et que ça pose un problème de les dupliquer dans des structures différentes, on peut faire autrement : garder juste l'ArrayList de départ, mais la trier d'abord pour que la recherche de doublons soit plus efficace. (À condition bien sûr qu'on travaille sur un type ordonnable. Sinon, ben, il n'y a pas grand-chose à faire de mieux que la solution qui avait été retenue avant.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. 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
  2. Requête : enlever les doublons
    Par Metallic-84s dans le forum Requêtes
    Réponses: 3
    Dernier message: 02/03/2006, 20h34
  3. Enlever les doublons en fonction de la date
    Par nicko5959 dans le forum Access
    Réponses: 2
    Dernier message: 10/01/2006, 14h13
  4. [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
  5. [array] enlever les doublons
    Par FFF dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 01/11/2005, 10h43

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