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 :

Creation arrays list of arraylist


Sujet :

Collection et Stream Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Automaticien
    Inscrit en
    Mai 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Mai 2014
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Creation arrays list of arraylist
    Bonjour,

    Actuellement, je suis a réaliser un petit programme qui est composé de 2 listes de nombres. Ces 2 listes de nombre doivent s'enregistrer dans un tableau. J'ai donc utilisé un ArrayList ( Qui correspond au tableau de mes listes) et un autre ArrayList pour 1 liste de nombres.

    Lorsque je met la liste de nombre dans le tableau, tout se passe bien. Il y a bien 1 liste avec mes nombres enregistrée.

    Par contre, lorsque je veux mettre 2 listes de nombre dans le tableau, il y'a bien 2 Listes de nombre dans le tableau mais les nombres de la liste No 1 et No 2 sont identiques.

    Je ne comprends pas ce qui se passe.

    Pouvez vous m'aider ?

    Merci d'avance,

    Nicolas

    Voici mon programme.

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    import java.util.ArrayList;
     
    publicclass test {
     
       public static void main(String args[])
     
        {
     
    // Declaration
     
        ArrayList<ArrayList<Integer>> nodes = new ArrayList<ArrayList<Integer>>();
     
        ArrayList<Integer> nodeList = new ArrayList<Integer>();
     
    // Ajout d elements liste No 1
     
       nodeList.add(1);
     
       nodeList.add(2);
     
       nodeList.add(3);
     
       nodeList.add(4);  
     
    // Ajout de la liste dans le tableau
     
       nodes.add(nodeList);
     
    // Effacement de la liste
     
       nodeList.clear();
     
    // Ajout d elements liste No 2
     
       nodeList.add(9);
     
       nodeList.add(8);
     
       nodeList.add(7);
     
       nodeList.add(6);
     
    // Ajout de la liste dans e tableau
     
       nodes.add(nodeList);    
     
    // Affichage
     
        for (int a=0;a<nodes.size();a++)
     
       {
     
        System.out.println("Taille tableau : " + nodes.size());
     
        for (int i=0;i<nodes.get(a).size();i++)
     
       {
     
        System.out.println("No du tableau : " + a); 
     
        System.out.println("Taille liste : " + nodes.get(a).size());
     
        System.out.println("Element " + nodes.get(a).get(i));
     
       }
     
       }
     
        }
     
    }

  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,



    Je ne vois qu'une seule liste de nombre dans ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ArrayList<Integer> nodeList = new ArrayList<Integer>();

    a++


    PS : utilises [code] et [/code] autour de ton code source pour qu'il soit formaté sur le forum.
    C'est plus lisible...

  3. #3
    Candidat au Club
    Homme Profil pro
    Automaticien
    Inscrit en
    Mai 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Mai 2014
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Salut,



    Je ne vois qu'une seule liste de nombre dans ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ArrayList<Integer> nodeList = new ArrayList<Integer>();

    a++


    PS : utilises [code] et [/code] autour de ton code source pour qu'il soit formaté sur le forum.
    C'est plus lisible...



    Effectivement, il n'y a que 1 instance.

    L'algorithme cite au dessus correspond a une version simplifié de mon problème :

    Dans ce programme, je vais recevoir 9 arraylist. Ils sont commandé par une boucle FOR. A chaque incrémentation de l'index de la boucle, l'Arraylist doit s'empiler dans le tableau.

    Les instances peuvent être créé avant la boucle FOR. mais comment peut on transférer les arraylist ?

    Merci encore pour ton aide

    Nicolas

  4. #4
    Membre chevronné
    Avatar de la.lune
    Homme Profil pro
    Directeur Technique
    Inscrit en
    Décembre 2010
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Comores

    Informations professionnelles :
    Activité : Directeur Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2010
    Messages : 545
    Points : 2 084
    Points
    2 084
    Par défaut
    Tu est entrain de détruire les éléments de ta première liste
    Pas seulement que le nombres de données sont identiques mais ils sont strictement égaux si tu veux les afficher dans les deux cas tu aura que les valeur 9,8,7,6,

    En effet tu n'a pas deux listes, tu as une seule liste et tu prend sa référence, tu l'ajoute deux fois à ta liste mère, il ne crée pas une copie de la liste mais une copie de la référence donc c'est la même référence, c'est le même objet nodeList , tu n'a pas créer un nouveau objet liste, un objet ça se crée avec un new

    Il faut comprendre qu'en java on travail avec des référence, ton nodeList est la référence que tu possèdes, quand tu effaces c'est que tu effaces ta liste ajouté, car en fait la grande liste en fait référence.
    Code Java : 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
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    import java.util.ArrayList;
     
    public class test {
     
    public static void main(String args[])
    {
    // Declaration
    ArrayList<ArrayList<Integer>> nodes = new ArrayList<ArrayList<Integer>>();
    ArrayList<Integer> nodeList = new ArrayList<Integer>();
     
    // Ajout d elements liste No 1
    nodeList.add(1);
    nodeList.add(2);
    nodeList.add(3);
    nodeList.add(4); 
     
    // Ajout de la liste dans le tableau
    nodes.add(nodeList);
     
    nodeList = new ArrayList<Integer>();
     
    // Ajout d elements liste No 2
    nodeList.add(9);
    nodeList.add(8);
    nodeList.add(7);
    nodeList.add(6);
    // Ajout de la liste dans e tableau
    nodes.add(nodeList); 
    // Affichage
    for (int a=0;a<nodes.size();a++)
    {
    System.out.println("Taille tableau : " + nodes.size());
    for (int i=0;i<nodes.get(a).size();i++)
    {
    System.out.println("No du tableau : " + a); 
    System.out.println("Taille liste : " + nodes.get(a).size());
    System.out.println("Element " + nodes.get(a).get(i));
       }
       }
        }
    }

  5. #5
    Membre chevronné
    Avatar de la.lune
    Homme Profil pro
    Directeur Technique
    Inscrit en
    Décembre 2010
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Comores

    Informations professionnelles :
    Activité : Directeur Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2010
    Messages : 545
    Points : 2 084
    Points
    2 084
    Par défaut
    Citation Envoyé par jimharley22 Voir le message
    Les instances peuvent être créé avant la boucle FOR. mais comment peut on transférer les arraylist ?
    Que ce qui t’empêche de créer une nouvelle instance dans ta boucle? Si tu veux à tout pris utiliser la même variable, rien ne t’empêche qu'au lieu de faire comme ça
    nodeList.clear(); qui ne créer pas de liste, il faut faire comme ça nodeList=new ArrayList<Integer>();, ta première instance n'est pas détruit car la grande liste nodes fais référence déjà. Il faut différencier entre l'objet qui est en mémoire et la variable qui fait reference

    EDIT: J'ai modifié le programme en haut pour que ça correspond exactement à ton cas

  6. #6
    Candidat au Club
    Homme Profil pro
    Automaticien
    Inscrit en
    Mai 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Mai 2014
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par la.lune Voir le message
    Que ce qui t’empêche de créer une nouvelle instance dans ta boucle? Si tu veux à tout pris utiliser la même variable, rien ne t’empêche qu'au lieu de faire comme ça
    nodeList.clear(); qui ne créer pas de liste, il faut faire comme ça nodeList=new ArrayList<Integer>();, ta première instance n'est pas détruit car la grande liste nodes fais référence déjà. Il faut différencier entre l'objet qui est en mémoire et la variable qui fait reference

    EDIT: J'ai modifié le programme en haut pour que ça correspond exactement à ton cas
    Merci beaucoup,

    maintenant ça fonctionne.

    Merci beaucoup ...

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

Discussions similaires

  1. conversion array -> liste déroulante
    Par john123 dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 09/05/2007, 10h24
  2. Réponses: 7
    Dernier message: 26/04/2007, 18h05
  3. [VB.net] Join d'un Array list de string?
    Par the_bmo dans le forum VB.NET
    Réponses: 8
    Dernier message: 15/12/2005, 13h53
  4. Vertex Array & Listes d'Affichage ...
    Par yagero dans le forum OpenGL
    Réponses: 3
    Dernier message: 18/09/2005, 18h32
  5. Réponses: 10
    Dernier message: 13/06/2005, 16h02

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