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

Langage Java Discussion :

choix s'une structure de données


Sujet :

Langage Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2003
    Messages : 8
    Points : 6
    Points
    6
    Par défaut choix s'une structure de données
    Hello,

    Voilà mon problème :

    J'ai une boucle sur environ 1'000'000 de comptes.
    Chaque compte a un propriétaire.
    Il y'a ~200'000 propriétaires.

    A chaque itération je dois savoir si le propriétaire du compte a déjà été traité ou non pour agir en fonction.

    Pour celà, je mets l'identifiant du propriétaire dans une structure de données garantissant l'unicité.
    Il me suffit donc de tester si ma structure contient déjà l'identifiant courant pour savoir si le propriétaire a déjà été traité.

    Un peut de code valant mieux qu'on long discours...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Collection<Compte> listeComptes    = new HashSet<Compte>();  // ~ 1'000'000
    Collection<String> listeDejaTraite = new HashSet<String>() ; // ~   200'000
     
    for(Compte compte : listeComptes) {
        if(listeDejaTraite.contains(compte.getProprio())) {
          //traitement du compte si son proprio a déjà été traité
        }
        else {
          listeDejaTraite.add(compte.getProprio()) ;
          //traitement du compte si son proprio a pas encore été traité
        }
    }

    Ma question est donc la suivante :
    Quelle est la structure de données la plus adaptée pour ma listeDejaTraite ?!?

    Et au passage, y'aurait-il un meilleur moyen de savoir si le proprio a déjà été traité ou non ? (sachant qu'on ne peut pas jouer sur l'ordre de tri de la listeComptes)

    Merci d'avance

  2. #2
    Membre éclairé Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Points : 683
    Points
    683
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Set<Compte> listeComptes    = new HashSet<Compte>();  // cf. ordre de tri
    SortedSet<String> listeDejaTraite = new TreeSet<String>() ; // cf. structure adaptee 
     
    for(Compte compte : listeComptes) {
       String proprio = compte.getProprio(); // optimisation
       boolean dejaTraite = listeDejaTraite.add(proprio); // cf. meilleur moyen
       if(dejaTraite) {
          //traitement du compte si son proprio a déjà été traité
        }
        else {
          //traitement du compte si son proprio a pas encore été traité
        }
    }

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2003
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    merci beaucoup pour la réponse.
    par contre j'ai l'impression que le boolean utilisé est "à l'envers" : la méthode add retourne TRUE si le set ne contenait pas encore l'élément ajouté.
    Donc ça serait plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    boolean pasEncoreTraite = liste.add(...)
    il n'y aurait pas un autre moyen plus élégant que d'utiliser une collection ?

  4. #4
    Membre éclairé Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Points : 683
    Points
    683
    Par défaut
    Citation Envoyé par fabaroulettes
    j'ai l'impression que le boolean utilisé est "à l'envers"
    Autant pour moi ...

    Citation Envoyé par fabaroulettes
    il n'y aurait pas un autre moyen plus élégant que d'utiliser une collection ?
    C'est un paradoxe ?!

Discussions similaires

  1. Choix d'une structure de donnés ?
    Par ThE_LaSt dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 16/03/2008, 13h18
  2. choix d'une base de données simple
    Par semenzato dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 12/07/2005, 14h18
  3. choix d'une base de donnée
    Par frisouille dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 17/06/2005, 15h52
  4. Choix d'une base de données
    Par AlexB59 dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 07/06/2005, 17h02
  5. Choix d'une base de données
    Par maurice66 dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 15/07/2004, 10h14

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