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 méthode pour remplir une liste


Sujet :

Java

  1. #1
    Membre régulier Avatar de kodo
    Profil pro
    Chef de projet technique
    Inscrit en
    Mars 2006
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Chef de projet technique

    Informations forums :
    Inscription : Mars 2006
    Messages : 300
    Points : 92
    Points
    92
    Par défaut Meilleure méthode pour remplir une liste
    Bonjour,
    Est ce qu'il y a une différence coté exploitation de la mémoire concernant l'insertion des objets dans une liste surtout dans le cas ou le nombre des objets à insérer est grand.
    Personnellement je ne vois qu'une seule différence, c'est que avec la deuxième méthode il y a une seule référence pour tous les objets créés.
    Méthode 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    List<A> listA = new ArrayList<A>();
    for(int i = 0; i< j; i++){
      A a  = new A(i);
      listA.add(a);
    }
    Méthode 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    List<A> listA = new ArrayList<A>();
    A a  = null;
    for(int i = 0; i< j; i++){
      a  = new A(i);
      listA.add(a);
    }
    Merci

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,

    c'est que avec la deuxième méthode il y a une seule référence pour tous les objets créés.
    Non, à chaque fois que tu fais un new dans l’itération de la boucle, tu instancies un nouveau objet dont chacun a sa référence. Chaque objet sera référencé par chaque itération de la liste quand tu l'ajoute dans listA.
    La différence entre les deux boucles, c'est que dans la première méthode, tu peux toujours accéder à la variable "a" même après la boucle. Ce qui n'est pas le cas pour la deuxième, la variable a n'est accessible que dans la boucle.
    Les objets référencés sont toujours gardé en mémoire, sinon, il sera supprimé par le garbage collector à un moment.
    Une troisième méthode qui sera le même que les 2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    List<A> listA = new ArrayList<A>();
    for(int i = 0; i< j; i++){
      listA.add(new A(i));
    }
    A+.

  3. #3
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 635
    Points
    21 635
    Par défaut
    Si tu avais déjà un tableau ou une Collection d'objets à insérer dans ta liste, il vaudrait mieux le faire avec addAll() plutôt que boucler sur add() : ça économise des appels de méthode et ça évite à l'ArrayList de devoir sans arrêt redimensionner son tableau interne.
    Mais bon, ça c'est si tu as déjà ce tableau ou cette Collection disponible, ce qui n'a pas l'air d'être ton cas.

    Et pour éviter de redimensionner sans arrêt le tableau interne, il suffit de l'initialiser à la bonne taille : dans ton cas en faisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<A> listA = new ArrayList<A>(j);

  4. #4
    Membre régulier Avatar de kodo
    Profil pro
    Chef de projet technique
    Inscrit en
    Mars 2006
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Chef de projet technique

    Informations forums :
    Inscription : Mars 2006
    Messages : 300
    Points : 92
    Points
    92
    Par défaut
    Merci pour les réponses.
    Si j'ai bien compris, il n y a de difference cote temps d'execution des deux methodes, puisque l'exploitation de la mémoire est la même.

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 635
    Points
    21 635
    Par défaut
    En fait il n'y a pas de différence tout court. Ni en temps d'exécution, ni sur quoi que ce soit à l'exécution.

    La deuxième méthode est juste un peu moins facile à lire, et un peu plus génératrice de bug, puisqu'elle donne à la variable a une portée plus grande que nécessaire.

Discussions similaires

  1. [débutant]méthode pour récupérer une liste
    Par Msysteme dans le forum C#
    Réponses: 10
    Dernier message: 27/02/2009, 12h01
  2. Meilleur méthode pour gérer une liste des blocks
    Par smyley dans le forum Algorithmes et structures de données
    Réponses: 41
    Dernier message: 22/07/2008, 02h06
  3. Réponses: 5
    Dernier message: 03/01/2008, 16h07
  4. Meilleure méthode pour vider une JTable
    Par JamesP dans le forum Composants
    Réponses: 9
    Dernier message: 17/08/2007, 11h42
  5. macro pour remplire une liste dans une même cellule
    Par fabiend83 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 17/07/2006, 09h32

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