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 :

Insertion d'un élément dans une liste affecte les anciens éléments insérés


Sujet :

Collection et Stream Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 49
    Points : 41
    Points
    41
    Par défaut Insertion d'un élément dans une liste affecte les anciens éléments insérés
    Bonjour,
    J'ai un problème qui me semble bizzard et je cherche une explication.
    J'ai une liste d'elements qui doivent chacun avoir une valeur differente pour un attribut donné. Pour la remplir, j'utilise une variable tempon que je met à jour à chaque iteration. Le probleme est le suivant : dès que je me à jour le tempon, les premières éléments insérés dans la liste se mettent à jour. Un comportement très imprevu? Voir le code joint
    Quelqu'un a t-il une explication?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    public class BeanA {
    	private int a;
    	....
    	public void setA(int a){
    		this.a=a;
    	}
    }
    public class BeanB{
    	private A retainedA;
    	private List<A> aMemebers = new ArrayList<A>();
    	.... // getters, setters et autres ...
    }
    public class C {
    	private List<BeanB> processed = new ArrayList<BeanB>();
    	private List<BeanB> pending = new ArrayList<BeanB>();
    	.... // getters, setters et autres ...
    	public List<C> branch(){
    		BeanB selected = pending.get(0);
    		List<C> children = new ArrayList<C>();
    		for(A e : selected.getAMemebers()){
    			C child = new C();
    			selected.setRetainedA(e); // L'objectif est que chaque child ait un  retainedA different et le probleme est que dans la liste children tous les elements ont la meme valeur de retainedA qui correspod à la valeur de dernier child.
    			child.getProcessed().addAll(processed);
    			child.getProcessed().add(selected);
    			child.getPending().addAll(pending);
    			child.getPending().remove(0);
     
    			children.add(child);
    		}
     
    	}
    }
    Merci

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    tu n'a qu'une seule instance de BeanB, qui s'appelle selected, et chaque child va avoir, via
    child.getProcessed().add(selected);
    un référence à cette instance. Si tu veux que chaque child aie une instance différent, il va faloir créer un nouveau BeanB à chaque fois.

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

Discussions similaires

  1. Insertion d'un élément dans une liste simplement chainée triée (croissante)
    Par vayouva dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 14/11/2014, 09h29
  2. [Free Pascal] Insertion d'éléments dans une liste chaînée
    Par Pacorabanix dans le forum Free Pascal
    Réponses: 4
    Dernier message: 20/04/2010, 00h42
  3. Réponses: 12
    Dernier message: 12/03/2007, 16h58
  4. [debutant] insertion d'éléments dans une List
    Par gwenou60 dans le forum Composants
    Réponses: 1
    Dernier message: 05/12/2005, 09h59
  5. Insertion d'un noeud dans une liste chaînée
    Par habib106 dans le forum Assembleur
    Réponses: 8
    Dernier message: 07/04/2004, 22h34

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