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 :

Vector de Personnes


Sujet :

Collection et Stream Java

  1. #1
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 187
    Points : 51
    Points
    51
    Par défaut Vector de Personnes
    Bonjour,
    je voudrais créer une classe ListeDePersonnes qui servira à mémoriser des Personnes et j'aimerais le faire avec un Vector.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public class Personne{	
            private String nom;
    	private String prenom;
    	...
    }
    Pour commencer, pouvez-vous me dire si ceci est correcte?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public class ListeDePersonnes{
        Vector listePers = new Vector ();
     
    }
    Ensuite, je rajouterais une méthode pour tester le fonctionnement du vecteur:

    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
     
    public class ListeDePersonnes{
        Vector listePers = new Vector ();
     
        public void testVector(){    
            listePers.addElement(new Personne (André, Tara);
            listePers.addElement(new Personne (Antoine, Dupont);
            listePers.addElement(new Personne (Antoinette, Durand);
     
        // ici je voudrais parcourir mon vecteur avec un foreach 
        // afficher le nom des trois personnes mais je n'y arrive pas... 
     
        }
     
    }

  2. #2
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 021
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 021
    Points : 2 278
    Points
    2 278
    Par défaut
    Salut,
    est-ce que le choix du Vector est imposé ? car en théorie une ArrayList est plus adaptée si t'utilises un seul thread (faq1, faq2).
    A part ça, il serait plus simple d'étendre Vector ou ArrayList plutôt que de stocker une liste interne. Sinon pour ton for et le typage tu peux regarder ici.
    Bye
    Vive les roues en pierre

  3. #3
    Membre éclairé Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 672
    Points
    672
    Par défaut
    Bonjour,

    En quelle version de java travailles tu?
    Parce que les Vector ne sont plus utilisés depuis un moment.
    http://java.developpez.com/faq/java/...IONS_info_list

    Et grâce aux classes génériques, tu n'as surement pas besoin de créer cette classe:

    si tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<Personne> listePersonne = new ArrayList<Personne>();
    Tu pourras faire après


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for(Personne personne : listePersonne){
        personne.methode();
    }

  4. #4
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 187
    Points : 51
    Points
    51
    Par défaut
    Je suis obligé d'utiliser un Vector...

    D'avance merci.

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Points : 1 419
    Points
    1 419
    Par défaut
    Bon bah...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<TaClasse> list = new Vector<TaClasse>();
    Et quand tu ne seras plus obligé d'utiliser Vector, remplace-le par ArrayList

  6. #6
    Membre confirmé Avatar de totoche
    Inscrit en
    Janvier 2004
    Messages
    1 090
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 090
    Points : 558
    Points
    558
    Par défaut
    Ici est là question
    Citation Envoyé par alex2746 Voir le message
    // ici je voudrais parcourir mon vecteur avec un foreach
    // afficher le nom des trois personnes mais je n'y arrive pas...

    }

    }
    Une réponse possible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Dans la classe Personne
    public String getNom(){return this.nom;}
    public String getPrenom(){return this.prenom;}
     
    Dans ton Main par exemple :
     Enumeration e=listePers.elements();
        System.out.println("Les personnes enregistrées");
        while(e.hasMoreElements()){
        Personne laPersonne = (Personne) e.nextElement());
          System.out.println(laPersonne.getNom() + " " + laPersonne.getPrenom());
        }
    La patience est un arbre aux racines amères, mais aux fruits ci-doux.

  7. #7
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 187
    Points : 51
    Points
    51
    Par défaut
    Salut, je dois utiliser un FOREACH obligatoirement, pas un itérateur...

    Je pensais pouvoir donc écrire ceci, mais ca ne marche pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for (Personne p : listePers)
                System.out.println("rien");
    Quelqu'un pourrait m'aider à utiliser le FOREACH pour parcourir mon vecteur?

    Merci d'avance.

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Points : 1 419
    Points
    1 419
    Par défaut
    Oui, change l'initialisation de ton vecteur pour ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Vector<Personne> listePers = new Vector<Personne>();

  9. #9
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 187
    Points : 51
    Points
    51
    Par défaut
    Merci.
    Un conseil...
    on me demande donc de créer une classe servant à mémoriser des Personnes et d'utiliser pour ce faire un Vector.

    Est ce mieux de déclarer le Vector en private ou non?

    Donc, ceci?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public class ListePersonnes{
        private Vector<Personne> listePers = new Vector <Personne> ();
    }
    Ou ceci?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public class ListePersonnes{
        Vector<Personne> listePers = new Vector <Personne> ();
    }
    Dernière chose:
    Si on me demande uniquement de faire ce que j'ai décris plus haut, je n'ai pas besoin de constructeurs, autres attributs, méthodes, etc?

    Merci d'avance.

  10. #10
    Membre éprouvé
    Avatar de michel.di
    Homme Profil pro
    Freelance
    Inscrit en
    Juin 2009
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 782
    Points : 1 042
    Points
    1 042
    Par défaut
    normalement tu déclares tes attributs en private et tu ne donnes que les accesseurs nécessaires. Tout les attributs ne sont pas forcément visible pour l'extérieur
    Docteur en informatique
    Freelance R&D, Web
    Activité freelance : https://redinnov.fr
    Page perso : https://michel-dirix.com/

  11. #11
    Membre confirmé Avatar de gronono
    Inscrit en
    Novembre 2003
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2003
    Messages : 456
    Points : 482
    Points
    482
    Par défaut
    Sinon tu peux aussi implémenter Iterable voir le code ci-dessous.

    Je suis contre l'héritage de Vector. La composition reste une meilleur solution. En effet, si tu hérite de Vector, ton objet va posséder les méthodes addElement, removeElement,... Si un jour tu décides de plus utiliser Vector mais ArrayList, alors tu devras soit recoder tous les clients de la classe, soit implémenter ces méthodes. Dans la composition, tu expose uniquement les méthodes que tu veux (et avec le nom que tu décides). Donc même si tu changes ton implémentation, les clients ne changent pas.

    Pour des raisons un peu similaires à la composition, ta liste de personnes peut être de type List en utilisant la classe Vector comme implémentation. Si un jour tu changes l'implémentation en ArrayList, le reste de ta classe ne change pas.

    C'est pourquoi je propose comme solution les classes suivantes :

    La classe Personne
    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
     
    public class Personne {
        private String nom;
        private String prenom;
     
        public Personne() {
        }
     
        public Personne(String prenom, String nom) {
            this.nom = nom;
            this.prenom = prenom;
        }
     
        public String getNom() {
            return nom;
        }
     
        public void setNom(String nom) {
            this.nom = nom;
        }
     
        public String getPrenom() {
            return prenom;
        }
     
        public void setPrenom(String prenom) {
            this.prenom = prenom;
        }
    }
    La classe ListeDePersonne :
    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
     
    import java.util.Collection;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Vector;
     
    public class ListeDePersonnes implements Iterable<Personne> {
        private List<Personne> listePers = new Vector<Personne>();
     
        public boolean add(Personne p) {
            return listePers.add(p);
        }
     
        public boolean addAll(Collection<Personne> p) {
            return listePers.addAll(p);
        }
     
        public Iterator<Personne> iterator() {
            return listePers.iterator();
        }
     
        public boolean remove(Personne p) {
            return listePers.remove(p);
        }
     
        public boolean removeAll(Collection<Personne> personnes) {
            return listePers.removeAll(personnes);
        }
     
        public int size() {
            return listePers.size();
        }
    }
    La classe de test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public class TestPersonne {
     
        public static void main(String[] args) {
            ListeDePersonnes listePersonnes = new ListeDePersonnes();
            listePersonnes.add(new Personne("André", "Tara"));
            listePersonnes.add(new Personne("Antoine", "Dupont"));
            listePersonnes.add(new Personne("Antoinette", "Durand"));
     
            for (Personne p : listePersonnes) {
                System.out.println(p.getPrenom() + " " + p.getNom());
            }
        }
    }

Discussions similaires

  1. Réponses: 19
    Dernier message: 14/11/2006, 16h45
  2. Recherche JBuilder personnal 6 ou 7
    Par raout dans le forum JBuilder
    Réponses: 6
    Dernier message: 05/05/2003, 20h34
  3. Installation JBUILDER 8 Personnal
    Par jpclerc dans le forum JBuilder
    Réponses: 2
    Dernier message: 22/03/2003, 09h58
  4. JBuilder 7 personnal sort à chaque save
    Par Hannouz dans le forum JBuilder
    Réponses: 4
    Dernier message: 17/12/2002, 22h53
  5. [Rave]Personne ne l'utilise ?? Demande d'info...
    Par Barbibulle dans le forum Rave
    Réponses: 4
    Dernier message: 07/11/2002, 23h12

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