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 :

Besoin d'explication sur l'utilisation d'un Vector contenant des tableaux de Strings.


Sujet :

Collection et Stream Java

  1. #1
    Membre actif
    Homme Profil pro
    testeur logiciel
    Inscrit en
    Juin 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : testeur logiciel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2007
    Messages : 125
    Points : 211
    Points
    211
    Par défaut Besoin d'explication sur l'utilisation d'un Vector contenant des tableaux de Strings.
    Bonjour,

    Je souhaite utiliser un Vector de tableau de Strings mais lorsque je consulte le contenu du Vector c'est toujours le dernier enregistrement que je vois.

    Exemple:
    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
     
    //Tableau de 3 Strings qui contient la description d'un article.
    String TabDescriptArticle[] = null;
    TabDescriptArticle = new String[3];
     
    //Vector qui va contenir les tableaux de Strings.        
    Vector<String[]> ListeArticles = new Vector<String[]>();
     
    //Création article 1  	  	
    TabDescriptArticle[0] = "Test1";
    TabDescriptArticle[1] = "Test2";
    TabDescriptArticle[2] = "Test3";  	 
     
    //Ajout au Vector  	  
    ListeArticles.add(TabDescriptArticle);
     
    //Création article 2
    TabDescriptArticle[0] = "Test4";
    TabDescriptArticle[1] = "Test5";
    TabDescriptArticle[2] = "Test6";  	 
     
    //Ajout au Vector  	  
    ListeArticles.add(TabDescriptArticle);
     
    //Pour vérifier l'enregistrement...
     
    String tab[] =  new String[3];
     
    tab = ListeArticles2.get(0);
    System.out.println(tab[0]+tab[1]+tab[2]);
     
    tab = ListeArticles2.get(1);
    System.out.println(tab[0]+tab[1]+tab[2]);
    Résultat:
    Test4Test5Test6
    Test4Test5Test6
    Je m'attendais à avoir:
    Test1Test2Test3
    Test4Test5Test6
    Pouvez-vous m'expliquer pourquoi ce résultat?

    J'ai essayé ainsi (avec 2 tableaux différents pour l'enregistrement dans le Vector) et j'obtiens bien le résultat voulu:
    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
     
    String TabDescriptArticle[] = null;
    String TabDescriptArticle2[] = null;
     
    TabDescriptArticle = new String[3];
    TabDescriptArticle2 = new String[3];
     
    Vector<String[]> ListeArticles = new Vector<String[]>();
     
    TabDescriptArticle[0] = "Test1";
    TabDescriptArticle[1] = "Test2";
    TabDescriptArticle[2] = "Test3";  	 
     
    ListeArticles.add(TabDescriptArticle);
     
    TabDescriptArticle2[0] = "Test4";
    TabDescriptArticle2[1] = "Test5";
    TabDescriptArticle2[2] = "Test6";  	 
     
    ListeArticles.add(TabDescriptArticle2);
     
    String tab[] =  new String[3];
     
    tab = ListeArticles2.get(0);
    System.out.println(tab[0]+tab[1]+tab[2]);
     
    tab = ListeArticles2.get(1);
    System.out.println(tab[0]+tab[1]+tab[2]);
    Test1Test2Test3
    Test4Test5Test6
    Merci d'avance pour vos explications.

  2. #2
    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 633
    Points
    21 633
    Par défaut
    Ben, si tu n'utilise pas deux tableaux différents, ça veut dire que tu utilises deux fois le même tableau... Et le même tableau, contient la même chose que lui-même, évidemment -_-°.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Citation Envoyé par Bundy*Al Voir le message
    Pouvez-vous m'expliquer pourquoi ce résultat?

    J'ai essayé ainsi (avec 2 tableaux différents pour l'enregistrement dans le Vector) et j'obtiens bien le résultat voulu:
    Tu donne toi même la réponse: si tu veux deux contenu différents, il te faut deux tableaux différents. Autrement dit, un appel à new String[3] à chaque nouvelle valeur du Vector.

  4. #4
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Mai 2010
    Messages : 40
    Points : 162
    Points
    162
    Par défaut
    En fait, cela ne fonctionne pas car, en Java, les tableaux et collections (Vector dans ton cas) contiennent des références vers les objets et non des copies.

    Ainsi, quand tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //Création article 2
    TabDescriptArticle[0] = "Test4";
    TabDescriptArticle[1] = "Test5";
    TabDescriptArticle[2] = "Test6";
    Tu "écrases" les précédentes valeurs inscrites dans TabDescriptArticle qui est référencé dans ton Vector (et donc modifié).

    Maintenant, quelques remarques concernant ton code en général:
    • L'utilisation de Vector est déconseillée depuis 10 ans, il vaut mieux utiliser l'interface List et ses implémentation (ArrayList et LinkedList)
    • C'est quoi le besoin qui fait que tu utilises un tableau dans un Vector ?
    • Les conventions de nommage de Java indiquent que les noms de variable doivent commencer par une minuscule.

  5. #5
    Membre actif
    Homme Profil pro
    testeur logiciel
    Inscrit en
    Juin 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : testeur logiciel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2007
    Messages : 125
    Points : 211
    Points
    211
    Par défaut
    Merci pour ta réponse.
    Effectivement je n'utilise qu'un tableau mais entre les 2 add dans le Vector, le contenu du tableau est modifié donc le Vector devrait avoir un contenu différent à l'index 0 et à l'index 1.

  6. #6
    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 633
    Points
    21 633
    Par défaut
    Donc, si je comprends bien, quand tu écris quelque chose dans ton cahier, c'est à dire que tu le modifies, puis que ensuite tu veux relire ton cahier : si tu le poses sur la table, là où il était au début, tu peux lire ce qu'il y avait avant tes modifications, et si tu le poses sur le bureau, là où tu as fait les modifications, tu peux lire les modifications ?

    C'est le même cahier ! Peu importe où il est, ce qu'il contient c'est ce que tu as fait en sorte qu'il contienne à la fin.

  7. #7
    Membre actif
    Homme Profil pro
    testeur logiciel
    Inscrit en
    Juin 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : testeur logiciel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2007
    Messages : 125
    Points : 211
    Points
    211
    Par défaut
    Merci pour vos réponses.
    Je débute en Java et je n'avais pas noté ce comportement avec les tableaux, c'est plus clair maintenant.
    Effectivement si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TabDescriptArticle = new String[3];
    avant l'insertion dans le Vector (j'ai changé pour ArrayList maintenant), ça fonctionne comme je veux.

    Mon besoin (juste un exo pour découvrir) est que dans une base de données j'ai un certain nombre d'articles qui sont associés à des factures. Ces articles ont un nombre de caractéristiques fixes (3). D'où les tableaux de 3 dans le ArrayList. Chaque factures contient donc un nombre d'articles. Je ne connais pas à l'avance le nombre d'articles dans une liste, donc pour récupérer les articles d'une liste j'ai créé un ArrayList de façon à stocker les infos sur les articles de la liste sans me préoccuper du nombre d'articles dans la liste.

  8. #8
    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 633
    Points
    21 633
    Par défaut
    Citation Envoyé par Bundy*Al Voir le message
    Je débute en Java et je n'avais pas noté ce comportement avec les tableaux, c'est plus clair maintenant.
    Les tableaux et tous les objets.

  9. #9
    Membre actif
    Homme Profil pro
    testeur logiciel
    Inscrit en
    Juin 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : testeur logiciel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2007
    Messages : 125
    Points : 211
    Points
    211
    Par défaut
    OK merci bien, je vais bosser cet aspect.

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

Discussions similaires

  1. Besoins d'explications sur les classes de base et de son utilisation
    Par vandeyy dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 07/03/2014, 15h49
  2. [xml] Xpath besoin d'explication sur preceding-sibling::
    Par ekmule dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 10/01/2006, 10h32
  3. besoin d'explication sur le c++
    Par poporiding dans le forum MFC
    Réponses: 13
    Dernier message: 17/12/2005, 19h01
  4. Besoin d'explications sur un bout de code
    Par zizitop dans le forum C
    Réponses: 7
    Dernier message: 26/04/2005, 15h51
  5. Besoin d'explications sur float et l'élasticité !
    Par KneXtasY dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 14/01/2005, 16h15

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