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 :

[Collections] Que choisir (tableau ou Map)


Sujet :

Collection et Stream Java

  1. #1
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 92
    Points : 70
    Points
    70
    Par défaut [Collections] Que choisir (tableau ou Map)
    Bonjour,

    J'ai une table en BD qui contient le code d'une action à la bourse, une date et la valeur de cette action à la date donnée. Seules 5 dates m'intéressent par action.

    Moi, je voudrais une structure simple, avec, si on considère un tableau, une action par ligne. Style un tableau de 6 colonnes avec le code de l'action, la valeur d'aujourd'hui, la valeur du mois dernier, la valeur ...

    J'ai tout de suite pensé à un tableau, mais est-ce ce qui existe de plus rapide en Java ?

    Ensuite, il faudra que je puisse facilement accéder aux valeurs d'une action à partir de son code. Il me faut donc une sorte d'index sur le code d'action, c'est pour ça que j'ai pensé à une Map. Je me dis que je pourrai faire une Map contenant en clé le code de l'action et en valeur un tableau contenant les 5 valeurs de mon action:

    MAP:
    cle | valeur
    13245 | [5.0, 2.0, 7.45, 12, 74]
    ...


    Je pourrai aussi remplacer le tableau par une Map, et avoir une Map de Map:

    MAP:
    cle | valeur
    13245 | MAP (auj -> 5.0, hier -> 2.0, mois dernier -> 7.45, ...-> 12, ...->74)

    Mais je n'en vois pas l'utilité.

    Je pense que c'est un problème auquel on est souvent confronté, devoir stocker des données issues d'une base dans un tableau ou une Map et j'aimerais avoir votre avis sur mon idée Map (key, tableau).

    Merci !!!

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par thomine
    Ensuite, il faudra que je puisse facilement accéder aux valeurs d'une action à partir de son code.
    Tu réponds toi-même à ta question !!!

    tableau (ou List) ==> afin d'utiliser des listes 'ordonnées'.

    Map ==> afin d'utiliser des couples clef/valeur pour retrouver facilement un valeur particulière...


    Le tableau est peut-être plus rapide pour l'accès à un élément, mais si tu dois parcourir la moitié du tableau pour rechercher un élément particulier c'est inutile...


    Pour moi ta solution Map(clef|tableau) me semble correct.

    La Map te permet d'accéder à une action particulière rapidement.
    Le tableau te permet d'afficher les différentes dates, surtout si ces différentes dates sont identiques comme cela semble être le cas...

    Tu pourrais opter pour une Map de Map si ces dates variaient (par exemple '20/06/2005' au lieu de 'J-1').

    a++

  3. #3
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 92
    Points : 70
    Points
    70
    Par défaut
    Merci adiGuba pour ta réponse rapide.
    Je voulais avoir un avis sur ma solution, histoire de voir si je passais pas à côté d'une super méthode qui tue pour résoudre mon problème.

    J'espère que ça pourra servir à d'autres personnes, vu que ce n'est pas toujours facile de choisir sa structure de données, surtout quand il commence à y avoir plusieurs dimensions !

    Encore merci et longue vie à ce super forum !

    Pour ceux qui veulent en savoir plus:
    http://java.developpez.com/faq/java/...angage_donnees

  4. #4
    NGY
    NGY est déconnecté
    Membre habitué
    Inscrit en
    Août 2002
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 137
    Points : 164
    Points
    164
    Par défaut
    Salut,

    Puisque tu programmes en Java, pourquoi n'utiliserais-tu pas les objets ?

    Au lieu de stocker tes actions dans un tableau à 6 colonnes, tu devrais les mettre dans des objets.
    Tu verras, c'est beaucoup plus facile à lire et à faire évoluer : un nom d'attribut est quand même plus parlant qu'un indice de tableau.

    J'ai une table en BD qui contient le code d'une action à la bourse, une date et la valeur de cette action à la date donnée.
    Traduit en langage objet ça veut dire ;
    Créer une classe Action qui possède les attributs : code, valeurAuj, valeurHier, valeurMoisDernier, ...
    => Tu noteras la similitude avec ta proposition de faire une Map de Map pour avoir des noms parlants :
    Je pourrai aussi remplacer le tableau par une Map, et avoir une Map de Map:

    MAP:
    cle | valeur
    13245 | MAP (auj -> 5.0, hier -> 2.0, mois dernier -> 7.45, ...-> 12, ...->74)
    Après, comme le dit adiGuba, tu peux stocker tes objets Action dans un tableau ou dans une Map selon tes besoins.

  5. #5
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 92
    Points : 70
    Points
    70
    Par défaut
    Merci pour ta réponse NGY.
    J'ai pensé à cette éventualité mais je me demande si en terme de performances ce n'est pas plus couteux de créer un objet spécifique pour gérer ça et dans ce cas, quel est le coût. Si c'est négligeable, on s'en fout, mais si le temps d'accès est multiplié par 5 ou 10, ça peut-être gênant.
    Sur ce point, j'avoue que mes connaissances sont limitées, j'ai peu de notions concernant la performance sur les accès.
    Avis aux amateurs !

    Merci.

  6. #6
    NGY
    NGY est déconnecté
    Membre habitué
    Inscrit en
    Août 2002
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 137
    Points : 164
    Points
    164
    Par défaut
    Je ne suis pas non plus un expert en la matière.
    Mais je pense qu'il est possible que les accès à un atttribut de classe soient un poil plus long qu'à un élément d'un tableau.
    Il suffit d'écrire un petit programme qui le vérifie :
    • on remplit un tableau ayant 1 ligne et n colonnes ;
      on remplit un objet ayant n attributs du même type que les éléments du tableau ;
      On fait genre 100 000 accès à des colonnes, on regarde le temps qu'il faut ;
      Et on refait la même chose en accédant aux attributs de l'objet.

    Maintenant, il ne pas forcément regarder la performance à tout prix. Surtout que sur un petit nombre d'accès la différence sera infime.
    Quand tu vois la souplesse qu'on gagne, à mon avis les cas où le tableau est préférable sont très marginaux.
    En plus, un tableau ne contient des éléments que d'un seul type, tandis que dans ton objet, tu peux stocker tout ce que tu veux : si un jour tu as nouveau besoin, par exemple stocker en plus le libellé de l'Action, comment tu vas faire avec ton tableau ?

  7. #7
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 92
    Points : 70
    Points
    70
    Par défaut
    C'est vrai que la souplesse et la clarté du code sont des choses primordiales. Je pense aussi qu'on devrait (même si je ne le fais pas tout le temps mais je vais me forcer un peu !!!) plus souvent construire des objets pour modéliser des structures de données (dès qu'on a une base de données, créer des objets qui représentent les données des tables). La maintenance du code est vraiment simplifiée car le code est beaucoup plus claire, même si sur le moment on a l'impression de perdre un peu de temps. Et puis ça permet d'être beaucoup plus souple si on veut modifier la base de données derrière...

    Merci pour tes réflexions NGY, je pense que je me vais me forcer un peu plus à créer des objets pour avoir un code vraiment propre, parce que c'est souvent plus important que la performance pure (qui est nécessaire que dans de rares applications).

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

Discussions similaires

  1. Collection, Dictionnary ou autres Que choisir?
    Par jubourbon dans le forum C#
    Réponses: 7
    Dernier message: 16/09/2010, 09h38
  2. mapping XML-Objet : que choisir ?
    Par hgede dans le forum Persistance des données
    Réponses: 3
    Dernier message: 16/04/2007, 13h43
  3. que choisir (tableau avec java)
    Par walid2012 dans le forum Collection et Stream
    Réponses: 27
    Dernier message: 30/04/2006, 12h42
  4. [VB.Net] Que choisir tableaux ou collections ?
    Par Pasiphae dans le forum VB.NET
    Réponses: 2
    Dernier message: 16/03/2006, 15h35
  5. Que choisir ? Visual C++ ou Borland c++ builder ?
    Par ashram dans le forum Débats sur le développement - Le Best Of
    Réponses: 27
    Dernier message: 24/02/2003, 14h39

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