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

Java Discussion :

Meilleure collection pour filtrer


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Par défaut Meilleure collection pour filtrer
    Bonjour à tous (désolé me revoilà),

    J'ai une d'ordre existentielle, savez-vous qu'elle serait la collection la plus adapté à ce que je voudrais faire c'est à dire :
    J'ai un fichier Xml qui contient x données, je voudrais récupérer uniquement les données correspondant à la chambre n après réflexion je me dis que j'ai peut-être pas besoin de tout charger dans une collection et ensuite filtrer ce que j'ai besoin ??

    Merci d'avance à tous.

  2. #2
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Je pense que oui : tu es dans le cadre d'un devoir et pas d'une application qui doit enregistrer dans une base.
    En chargeant les chambres une fois en mémoire, tu n'auras pas à accéder à chaque échange à ton fichier XML
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Par défaut
    Merci Népomucène pour ta réponse mais que veux tu dire exactement ? Que je dois lors de la 1ere lecture de mon fichier XML tout charger dans une collection (si tel est le cas, quelle collection serait la plus adapté ?) ou relire mon fichier XML et récupérer que ce dont j'ai besoin ?

    Merci d'avance.

  4. #4
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Je crois que tu as créé une classe pour représenter une chambre.
    Comme il s'agit d'un devoir, je pense que la quantité de données n'est pas trop grande (< 500 Mo)
    Donc tu peux te permettre de charger toutes tes chambres dans une Map qui a l'avantage de te donner l'accès par clé.
    Tu pourras accéder à un objet "chambre" par son numéro si tu choisis (ce que je pense) de prendre le n° de chambre comme clé

    regarde : http://java.developpez.com/faq/java/...TIONS_info_map
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    L'idée c'est de dire :

    - au démarrage, je charge le xml dans quelque chose (on verra après ce que c'est) qui reste en mémoire
    - à chaque fois que j'ajoute un nouvel élément, je l'ajoute dans ce quelque chose, et je sauvegarde dans le xml (en tâche de fond éventuellement, avec un Executor), comme ça le xml est toujours le plus à jour possible : mais comme le quelque chose est en mémoire et à jour, pas besoin de le charge.

    Ensuite décrivons le quelque chose. Le mieux serait de faire un classe qui à une ou plusieurs variables, ce qui permet de changer la façon dont on stocke les données, sans avoir à changer toutes les classes et méthodes qui y ont accès.

    Ensuite, la question de quelle collection. Evidemment, ça dépend de ce que tu veux en faire.

    A là base une ArrayList est le choix le plus commun, est ça le fait le job pour la plupart des cas. Simplement une ArrayList est rapide en parcourt et accès direct à un élément dont on connait l'index, plutôt en ajout et suppression à la fin, mais lente pour les ajouts et suppressions au début et au milieu. Mais il faut quand même avoir un très grand nombre de manipulations très souvent pour que ça se ressente.

    Il y a une alternative : le Set. L'avantage du Set est qu'il garantit l'unicité des éléments qu'on y met (mais on peut le garantir aussi avec un minimum de code, ou en faisant simplement attention à ce qu'on fait, avec l'ArrayList). Lorsqu'on utilise un HashSet, le test pour savoir si un élément est dans le set est très rapide. Mais l'inconvénient d'un Set est qu'on ne peut pas accèder à un élément directement par son index, mais les Stream peuvent nous aider, mais avec une performance moindre qu'avec un ArrayList (mais dans ton cadre, ça ne se verra pas vraiment).

    Ensuite, il y a l'accès aux données selon une clef, ou un ensemble de clefs (un peu l'équivalent du where SQL), et, là, une ArrayList est relativement très lente pour ça : on peut l'assister avec une ou plusieurs Map selon les cas, et c'est assez simple à gérer.

    Si tu as peu d'accès via l'index, mais beaucoup plus souvent par une clef, la Map suffira (on peut toujours parcourir son values()).


    Ensuite, pour filter, pour faire des traitements en masse en particulier, tu as également les Stream. Ce qui peut te permettre également de générer des listes intermédiaires pour certains traitements : par exemple un traitement particulier sur toutes les chambres occupées.

    [EDIT]Grillé par @Népomucène
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    [EDIT]Grillé par @Népomucène
    Ne me dis pas que j'ai été plus rapide que toi ??? ça doit être un bug du forum
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Par défaut
    Ok ! Merci à tous les 2 pour ces précisions. Je vais quand vous apporter quelques précisions sur le fonctionnement de mon appli après ce sera certainement plus claire pour vous, à savoir qu'une grande partie a été faite en contribution avec Joël (d'ailleurs je crois qu'à la fin de mon projet je vais mettre fait par joel.drigo).

    Commençons par son commencement :
    1 - J'ai une fenêtre principale qui me sert à créer, supprimer et visualiser des réservations, je vais insister sur le mot visualiser car c'est sur lui que je veux faire un filtre.
    2 - Le chargement des données ce fait 1 seule fois et uniquement à l'ouverture du logiciel dans des collections de type ArrayList.
    3 - A chaque mise à jour des données (ajouter, modifier et supprimer) les collections sont modifiés en fonction de l'action à faire et les fichiers XML sont mis à jour à leur tour mais en aucun cas je refais une relecture de ceux-ci.

    Donc je pense que tel que la décrit Joël, je dois être bon dans mon fonctionnement.

    Pour finir et c'est là le sujet de ma question :
    Lorsque l'utilisateur clique sur visualiser, je dois être capable de récupérer toutes les réservations de la chambre en question, exemple :
    Si je veux voir toutes les réservations de la chambre 1 je dois être de les récupérer dans une collection de type sont ensuite j'en ferai la lecture pour les afficher dans une jTable.

    Je crois que les collections de type Map n'accepte pas les clés en doublons donc si je dois m'en servir il va falloir que je fasse un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    HashMap<String, List<Booking>> cache = new HashMap<String, List<Booking>>();
    Qu'est ce que vous en pensez ?

    EDIT : Dactylo ce n'est pas mon fort, donc je met un peu de temps à écrire quelques lignes contrairement à Joël qui arrive à écrire des romans en 5mn

    Merci d'avance

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

Discussions similaires

  1. Les meilleurs livres pour PHP ?
    Par Community Management dans le forum Livres
    Réponses: 187
    Dernier message: 24/05/2015, 03h30
  2. Quels sont les meilleurs livres pour UML ?
    Par Matthieu Brucher dans le forum Livres
    Réponses: 33
    Dernier message: 31/01/2014, 10h36
  3. Les meilleurs livres pour l'Assembleur
    Par gtr dans le forum Livres
    Réponses: 52
    Dernier message: 25/09/2010, 10h25
  4. explications pour filtrer une collection avec iterator
    Par touftouf57 dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 20/01/2010, 10h32
  5. Réponses: 3
    Dernier message: 11/06/2008, 16h47

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