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

JDBC Java Discussion :

[Débutant - ResultSet] Pourquoi ArrayList et pas Tableau ?


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de ShinJava
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    413
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 413
    Par défaut [Débutant - ResultSet] Pourquoi ArrayList et pas Tableau ?
    Salut tout le monde, z’allez bien ?

    Dans la plupart des exemples et tutoriels, il est dit qu’il vaut mieux utiliser une ArrayList qu’un tableau pour stocker un ResultSet… mais y’a pas d’explication claire. Donc je vous le demande, pourquoi un ArrayList à la place d’un tableau ? (gain de performance peut être ?)

    Un exemple fictif : je veux afficher un tableau de 10 lignes avec 3 colonnes : une colonne pour le nom, une pour le prénom, une pour l’age.
    Dans ce cas, il vaut mieux faire un tableau à 2 dimensions non ?
    Imaginons maintenant qu’on obtient 50000 lignes en ResultSet.

    Si j’ai bien compris avec l’ArrayList, ça nous fera un tableau de 50000*3 cases (vu qu'on est sur une dimension), c’est à dire 150000 cases. Alors qu’un tableau du style Tableau[50000][3] ne serait-il pas le bienvenu dans ce cas la ?

    ++
    ShinJava

    ------------------------------------------------------------

    Petit débutant deviendra grand… débutant

  2. #2
    Membre expérimenté

    Avatar de christopheJ
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 600
    Par défaut
    Salut,

    Un tableau n'est pas redimensionnable, l'ArrayList est un tableau à une colonne qui s'agrandit.
    Si tu veux agrandir un tableau, tu dois en déclarer un second plus grand et copier le premier dedans, ce qui n'est pas rentable. En réalité l'ArrayList fait de même mais c'est transparent pour le programmateur.
    En général tu ne sais pas combien de ligne comporte ton ResultSet (à moins que ta requête ne retourne qu'une ligne de façon sûre). Tu dois donc chercher son nombre de lignes (ce qui suppose que ton ResultSet soit scrollable) pour pouvoir déclarer un tableau de la bonne taille. Si tu utilises un ArrayList, ce problème ne se pose plus.

    Ensuite pour le problème de une ou deux dimensions, en général je créé des Beans avec les données contenues dans le ResultSet. Cela facilite leur manipulation par la suite et fait que je n'ai besoin que d'une dimension pour les stocker, l'ArrayList est donc adapté.

    Pour plus d'info sur la copie de tableau et l'ArrayList, cf la FAQ :
    http://java.developpez.com/faq/java/..._resizeTableau

  3. #3
    Membre éclairé Avatar de ShinJava
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    413
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 413
    Par défaut
    Dakodak merci, tu m'as éclairé

    En faites, je faisais un getRow sur la dernière ligne du ResultSet pour déterminer la taille de mon tableau.

    Mais c'est vrai que là, l'ArrayList peut être assez avantageux finalement, ca m'éviterais une à 2 étapes en moins (parce que je creer un tableau pour Prenom , Nom et Age) ... du coup, j'aurais qu'une seule table a forwarder entre ma Servlet et ma JSP qui affichera le résultat.

    Y'a t'il une commande pour détruire l'ArrayList ? ou bien le faites de détruire (destroy) la Servlet, detruira l'ArrayList afin de libérer la Ram...

    Merci !

    ++
    ShinJava

    ------------------------------------------------------------

    Petit débutant deviendra grand… débutant

  4. #4
    Membre expérimenté

    Avatar de christopheJ
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 600
    Par défaut
    Attention, ce n'est pas toi qui appele le destroy(), c'est le container. Il ne faut pas que ton ArrayList soit un attribut de ta classe Servlet. C'est une variable locale (tu la construis dans la fonction et tu forwardes à la JSP). Elle est donc récupérée de la mémoire par le GC dès que tu quittes la fonction (perte de référence) a moins de la stocker en session.

  5. #5
    Membre éclairé Avatar de ShinJava
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    413
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 413
    Par défaut
    Citation Envoyé par christopheJ
    Attention, ce n'est pas toi qui appele le destroy(), c'est le container. Il ne faut pas que ton ArrayList soit un attribut de ta classe Servlet. C'est une variable locale (tu la construis dans la fonction et tu forwardes à la JSP). Elle est donc récupérée de la mémoire par le GC dès que tu quittes la fonction (perte de référence) a moins de la stocker en session.
    Ok, merci pour la précision, je ne savais pas pour le destroy. Je comprend mieux maintenant. Sinon, l'ArrayList n'est pas stocker en tant que session, donc ca ira.

    Merci beaucoup pour cette précision.
    ++
    ShinJava

    Hop la ... résolu!

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

Discussions similaires

  1. [PHP 5.3] [Débutant][OO]Pourquoi l'intentiation ne marche pas ainsi
    Par pierrot10 dans le forum Langage
    Réponses: 3
    Dernier message: 04/10/2010, 20h52
  2. [débutant] xml-xsl firefox : marche pas ?
    Par p-s dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 22/09/2005, 16h54
  3. Accept : pourquoi ça marche pas ?
    Par doudblast dans le forum Linux
    Réponses: 16
    Dernier message: 08/03/2005, 11h48
  4. [Système][Path]pourquoi j´ai pas de Classpath?
    Par lobiman dans le forum Général Java
    Réponses: 7
    Dernier message: 17/02/2005, 09h35
  5. pourquoi je peux pas parler pgplsql ?
    Par blob.b dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 09/09/2003, 23h22

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