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

Langage Java Discussion :

vecteur de classe


Sujet :

Langage Java

  1. #1
    Membre averti
    Inscrit en
    Février 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 15
    Par défaut vecteur de classe
    salut tlm,
    j'ai déclaré une classe Station et une classe Liaison.
    dans la classe Liaison j'ai déclaré un vecteur de type Station:
    Station[] stat;
    stat[0]=new Station();
    la compilation ça marche nickel mais lors de l'éxecution une exeption se produit
    ma déclaration est fausse ou on ne peut pas déclaré un vecteur d'instanciations d'une clasee ?

  2. #2
    Membre chevronné Avatar de schniouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 382
    Par défaut
    Citation Envoyé par mohamed amine
    salut tlm,
    j'ai déclaré une classe Station et une classe Liaison.
    dans la classe Liaison j'ai déclaré un vecteur de type Station:
    Station[] stat;
    stat[0]=new Station();
    la compilation ça marche nickel mais lors de l'éxecution une exeption se produit
    ma déclaration est fausse ou on ne peut pas déclaré un vecteur d'instanciations d'une clasee ?
    Déjà, ce n'est pas un vecteur que tu utilises, mais un tableau.
    Ensuite, tu déclares ton tableau mais tu ne l'instancie pas ! Comprends par là que tu ne le "crées" pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Station[] stat = new Station[3] ; // Ton tableau pourra contenir 3 Station au maximum
    stat[0]=new Station(); // ça marche
    stat[1]=new Station(); // re ça marche
    stat[2]=new Station(); // re re ça marche
    // stat[3]=new Station(); // ça plante, car ton tableau n'a que 3 cases !
    Si tu veux vraiment avoir un "vecteur" de Station (c'est à dire une liste de Station de taille variable), va voir du côté des Collections de Java, il y a sûrement ce que tu cherches : ArrayList me semble approprié dans ton cas.

    @+

  3. #3
    Membre éprouvé
    Avatar de moritan
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2005
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2005
    Messages : 687
    Par défaut
    Citation Envoyé par mohamed amine
    salut tlm,
    j'ai déclaré une classe Station et une classe Liaison.
    dans la classe Liaison j'ai déclaré un vecteur de type Station:
    Station[] stat;
    stat[0]=new Station();
    la compilation ça marche nickel mais lors de l'éxecution une exeption se produit
    ma déclaration est fausse ou on ne peut pas déclaré un vecteur d'instanciations d'une clasee ?

    Heu c'est un tableau pas un vecteur.
    sinon il ta que tu initialises stat avec un new Station[4]; par exemple.
    ou 4 est la taille de ton tableau.

  4. #4
    Membre émérite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par défaut
    sinon tu fais

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

  5. #5
    Membre éprouvé
    Avatar de moritan
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2005
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2005
    Messages : 687
    Par défaut
    Citation Envoyé par thibaut
    sinon tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Vector<Station> = new Vector<Station>();
    ArrayList pas vector car plus rapide

  6. #6
    Membre émérite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par défaut
    Ben vecteur pour moi c'est Vector (totally bilingue).

    Plus rapide, je crois que c'est plus tout à fais vrai pour les dernières versions du JDK.

  7. #7
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Citation Envoyé par thibaut
    Ben vecteur pour moi c'est Vector (totally bilingue).

    Plus rapide, je crois que c'est plus tout à fais vrai pour les dernières versions du JDK.
    Vector est plus lent car synchronisé. Rien à voir avec les versions de JDK qui feront juste que tu sentiras moins la différence.

  8. #8
    Membre émérite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par défaut
    Ben si et imagine que Vector ait été optimisé dans les versions récentes du JDK. Moi je ne suis pas certain qu'il faille mettre la classe Vector à la poubelle.

  9. #9
    Membre éprouvé
    Avatar de moritan
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2005
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2005
    Messages : 687
    Par défaut
    Citation Envoyé par thibaut
    Ben si et imagine que Vector ait été optimisé dans les versions récentes du JDK. Moi je ne suis pas certain qu'il faille mettre la classe Vector à la poubelle.
    ça a déjà été expliqué plusieurs fois sur le forum pourquoi Vector est plus lent que ArrayList.
    D'ailleurs Vector est conservé pour la compatibilité ascendante.
    Si vector est plus lent c'est parce qu'il est synchronisé qu'il soit optimisé ou non n'y changera rien il sera plus lent. donc vaut mieux utiliser Arraylist car plus rapide quand on peut.

  10. #10
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Citation Envoyé par thibaut
    imagine que Vector ait été optimisé
    Optimisé comment ? en en faisant une ArrayList ?
    Vector = poubelle ! Mieux vaut utiliser des List et s'il y a besoin de synchronisation, synchroniser la liste.

    Il faut évoluer un peu. Faut pas dire : utilisez "Vector" car ça veut dire "vecteur"...

  11. #11
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par thibaut
    Ben vecteur pour moi c'est Vector (totally bilingue).

    Plus rapide, je crois que c'est plus tout à fais vrai pour les dernières versions du JDK.
    Comme l'a dit natha, rien à voir avec les versions de la JVM...

    La synchronisation est coûteuse, et d'ailleurs il est plus rapide de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Vector v = new Vector();
    synchronized(v) {
        for(int i = 0; i < 10000; i++)
            v.add(new Object());
    }
    que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Vector v = new Vector();
    for(int i = 0; i < 10000; i++)
        v.add(new Object());

    Encore une raison d'utiliser ArrayList : même synchronisée, l'ArrayList est plus rapide (avec Collections.synchronizedList(new ArrayList())).

    Vector c'est juste pour la compatibilité ascendante... Tout comme Hashtable, Stack, Enumeration, StringTokenizer (pour une autre raison)...

  12. #12
    Membre Expert
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Par défaut
    Citation Envoyé par ®om
    ... StringTokenizer (pour une autre raison)
    Et on peut savoir laquelle ?


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  13. #13
    Membre émérite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par défaut
    Oui certes ArrayList est plus rapide, c'était pour soulever un débat.

    Mais ce que je voulais dire dans le fond c'est qu'il ne faut pas systématiquement bannir Vector, en effet je suis d'accord que dans les situations ou le temps de réponse doit être optimisé on peut préférer ArrayList. Mais si on est dans une petit appli, standalone, qui n'est pas trop gourmande en temps de travail on pourra utiliser indiféremment ArrayList ou Vector, la différence en temps d'exécution ne sara pas perceptible pour l'utilisateur.

    A+

  14. #14
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Citation Envoyé par thibaut
    on pourra utiliser indiféremment ArrayList ou Vector, la différence en temps d'exécution ne sara pas perceptible pour l'utilisateur.
    Pourquoi utiliser un scooter au lieu d'un moto quand on a les deux ???
    Après en entreprise t'a des gaillards qui se pointent et utilisent Vector car "c'était pas méchant" quand ils ont appris... alors que tout est bon à prendre au contraire.

    Il n'y a aucun argument valable pour utiliser encore Vector dans les nouvelles applics !

  15. #15
    Membre émérite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par défaut
    Citation Envoyé par natha
    Il n'y a aucun argument valable pour utiliser encore Vector dans les nouvelles applics !
    Ah, si il y en a au moins un et de taille: la compatibilité ascendante...

  16. #16
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par thibaut
    Ah, si il y en a au moins un et de taille: la compatibilité ascendante...
    Pour une nouvelle appli, il n'y a pas besoin de compatibilité ascendante... (compatibilité avec quoi, d'ailleurs?)

  17. #17
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par afrikha
    Et on peut savoir laquelle ?
    En tout cas pas pour une raison de synchronisation (enfin il ne me semble pas).

    Je crois que c'est parce qu'il y a notamment quelques bugs, et que ça complexifie le problème de découper une chaine en tokens (ça fait plus de code qu'un simple split).
    De toute façon, c'est découragé clairement dans la javadoc

  18. #18
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 94
    Par défaut
    Citation Envoyé par ®om
    Pour une nouvelle appli, il n'y a pas besoin de compatibilité ascendante... (compatibilité avec quoi, d'ailleurs?)
    C'est toujours utile pour certaines APIs qui dans leurs méthodes demandent des vecteurs en paramètres, y en a encore pas mal dans swing par exemple.

  19. #19
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

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

    Informations forums :
    Inscription : Août 2002
    Messages : 237
    Par défaut
    En fait c'est pour prendre les bonnes habitudes :

    Vector -> ArrayList
    HashTable -> HashMap

    Ensuite j'imagine qu'ils vont être "deprecated" s'ils ne le sont pas déjà...

    J'ai vu plusieurs projets repassser sur tout le code pour faire la conversion, alors un peu d'anticipation ne fait pas de mal.

  20. #20
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par Bruce Eckel, Thinking in Java 4th edition, p271
    (Fortunately, the modern Java container librairy replaces Vector with ArrayList, which behaves much more civilly. Unfortunately, there's still new code being written that uses the old container library.)
    Citation Envoyé par Bruce Eckel, Thinking in Java 4th edition, p272
    (Note that the modern Java container library replaces Hashtable with HashMap.)

Discussions similaires

  1. [Débutant] Vecteur de class contenant des pointeurs
    Par antoinelac dans le forum C++Builder
    Réponses: 3
    Dernier message: 31/05/2010, 23h48
  2. Réponses: 20
    Dernier message: 25/03/2010, 16h45
  3. template, vecteur de classes perso.
    Par viking1404 dans le forum Langage
    Réponses: 2
    Dernier message: 26/11/2009, 17h27
  4. Problème accès à une méthode d'un vecteur de classe
    Par sebdu94 dans le forum SL & STL
    Réponses: 3
    Dernier message: 01/05/2008, 00h00
  5. [conception] vecteur de classes
    Par r0d dans le forum C++
    Réponses: 7
    Dernier message: 28/12/2005, 13h00

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