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 :

remplissage d'un ArrayList


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Space23
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 185
    Par défaut remplissage d'un ArrayList
    Bonjour,

    J'ai un petit soucis d'écriture de code, je vous le met directement ça sera plus parlant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ArrayList<Solution> groupesCrusta = new ArrayList<Solution>();
    		Solution unGroupe ;
    		for (int i=0; i<7; i++) {
    			for (int j=0; j<7; j++) {
    				unGroupe = trouveGroupe(i, j, 1);
    				if (unGroupe != null) {
    					groupesCrusta.add(unGroupe);
    				}
    			}
    		}
    Si je fais ça, quand je vais trouver un deuxieme groupe, le premier élément de mon ArrayList sera écrasé pour être remplacé par le deuxième non?

    C'est une question toute con mais je ne vois pas comment contourner le problème sans faire du code tout moche .

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Par défaut
    Si je fais ça, quand je vais trouver un deuxieme groupe, le premier élément de mon ArrayList sera écrasé pour être remplacé par le deuxième non?
    non, il sera ajouté à la suite du dernier élément ajouté.
    Valable pour tous les implémentations de java.util.List.

    Tu peux voir ca dans la javadoc:
    http://java.sun.com/javase/6/docs/ap...util/List.html

  3. #3
    Membre confirmé Avatar de Space23
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 185
    Par défaut
    ah ok je ne voyais pas ça comme ça. Si j'avais utilisé un tableau à la place de ma liste j'aurais eu le problème?

  4. #4
    Membre expérimenté Avatar de Roy Miro
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 273
    Par défaut
    Citation Envoyé par Space23 Voir le message
    ah ok je ne voyais pas ça comme ça. Si j'avais utilisé un tableau à la place de ma liste j'aurais eu le problème?
    Non plus.
    En effet quand tu ajouté un objet A dans une collection ou un tableau, tu y ajoute en fait une référence vers ton objet A.

    Ce dernier ne risque donc pas d'être supprimé par le garbage collector.

    Ensuite ta référence unGroupe () qui jadis pointait sur A, peut maintenant pointer sur un autre objet B.

    A étant référencé désormais par la collection (ou le tableau).

  5. #5
    Membre confirmé Avatar de Space23
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 185
    Par défaut
    Donc à chaque fois que je change la valeur de ma variable , c'est la référence de cet objet qui va être changé (si j'ai bien tout compris ).

    Le garbage collector passe derrière pour vérifier que l'ancienne référence n'est utilisé par aucune instance.

  6. #6
    Membre expérimenté Avatar de Roy Miro
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 273
    Par défaut
    Le garbage collector passe derrière pour vérifier que l'ancienne référence n'est utilisé par aucune instance.
    Non.

    Ton objet est dit référencé s'il est au moins "pointé" par une variable ("référence" dans le gargon POO).
    Le garbage collector s'occupe de détruire les objets qui ne sont plus référencés. Il ne détruit donc que des objets. En java, tu manipules ton objet via une ou des références qui pointent dessus.

    Donc si aucune variable (référence) pointe sur lui, il devient "inatteignable" ,tu ne peux plus le manipuler et là, le gc n'a plus qu'à exécuter sa basse besogne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    A a = new A(); // la variable  'a' référence un objet 'A1'
     
    List list = new ArrayList();
     
    list.add(a); // 'A1' est référencé une fois de plus (par list):2 références au total sur lui
     
    a= new A()// la variable 'a' pointe désormais sur un nouvel objet 'A2', mais 'A1' ne risque pas d'être détruit car il est encore référencé par list
     
    list.add(a);
    System.out.println(list.size()); //affiche 2
    Il se passe la même chose avec ta boucle for.

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

Discussions similaires

  1. Actualiser un JTable au remplissage d'une ArrayList
    Par teribilis dans le forum Composants
    Réponses: 0
    Dernier message: 02/12/2012, 16h08
  2. Remplissage de arrayListe
    Par mariamti dans le forum Collection et Stream
    Réponses: 10
    Dernier message: 22/02/2008, 08h45
  3. remplissage d'un ArrayList
    Par rcober dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 07/02/2008, 11h13
  4. Réponses: 13
    Dernier message: 14/10/2003, 14h31
  5. Réponses: 11
    Dernier message: 04/08/2003, 15h30

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