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

  1. #1
    Membre confirmé Avatar de Satch
    Homme Profil pro
    Hypnothérapeute - Magicien
    Inscrit en
    mars 2004
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Hypnothérapeute - Magicien

    Informations forums :
    Inscription : mars 2004
    Messages : 498
    Points : 628
    Points
    628
    Par défaut [habitude] Pourquoi tant de personne utilisent encore Vector ?
    Tout est dans le titre.

    Je n'arrive pas à comprendre pourquoi je vois encore tant de personne parler des Vector quand à côté plein d'autres personnes se rompent l'échine à prôner l'utilisation d'ArrayList.
    Je sais que désormais vivre est un calembour,
    La mort est devenue un état permanent,
    Le monde est aux fantômes, aux hyènes et aux vautours.
    Moi je vous dis bravo et vive la mort.

  2. #2
    Membre expérimenté Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2004
    Messages
    896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2004
    Messages : 896
    Points : 1 595
    Points
    1 595
    Par défaut
    Salut,

    Lorsque j'ai appris Java en première année d'IUT, les profs nous ont appris à utiliser la classe Vector pour gérer les collections... donc toute la promo utilisait des Vectors

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

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : juin 2005
    Messages : 687
    Points : 3 135
    Points
    3 135
    Par défaut
    Pareil quand j'ai appris Java, Vector était l'objet de base pour les collections.

    Je pense qu'il en est de même pour bcp de monde, difficile de ce débarrasser des habitudes ( Collection col =new Vector(); )

    Et tant que Vector ne sera pas déprecated et donc avec un Warning dans l'IDE il est probable que Vector sera encore souvent utilisé.

  4. #4
    Membre expérimenté Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2004
    Messages
    896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2004
    Messages : 896
    Points : 1 595
    Points
    1 595
    Par défaut
    Citation Envoyé par moritan
    Pareil quand j'ai appris Java, Vector était l'objet de base pour les collections.

    Je pense qu'il en est de même pour bcp de monde, difficile de ce débarrasser des habitudes ( Collection col =new Vector(); )

    Et tant que Vector ne sera pas déprecated et donc avec un Warning dans l'IDE il est probable que Vector sera encore souvent utilisé.
    Ah ouais non ! Tu faisais déjà des trucs trop évolués !! Nous on faisait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Vector vector = new Vector();
    ça on aurait jamais compris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Collection col = new Vector();
    Il faut dire qu'on avait commencé Java 2 mois après le début de l'année. D'ailleurs je trouve que c'est un atout d'apprendre un langage objet aussi tôt (même si au début c'est vraiment galère).

  5. #5
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    avril 2002
    Messages
    13 935
    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 935
    Points : 22 988
    Points
    22 988
    Billets dans le blog
    1
    Par défaut
    Salut,


    • La méconnaissance de l'API en général, et de l'API de Collection en particulier. Les personnes qui ont appris le langage avant Java 1.2 n'avaent pas d'autres choix.
    • Comme le dit yann2, les profs de Java ne sont pas tous très à jours et continue à utiliser leurs vieux cours...
    • Dans certains cas, on a besoin d'utiliser Vector. En particulier avec les API datant d'avant Java 1.2 ou avec Swing qui n'offre pas d'alternative...



    Mais pour moi le plus important est d'utiliser une abstraction du type exact en utilisant les interfaces de l'API de Collection, et éviter les méthode du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void maMethode(ArrayList<?> arraylist);
    Mais utiliser un type plus générique selon les besoins, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void maMethode(List<?> list);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void maMethode(Collection<?> c);
    voir même :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void maMethode(Iterable<?> i);
    Cela permet de laisser de coté l'implémentation exacte et de mieux s'adapter aux besoins du développeur qui utilisera cette méthode :
    • Si on spécifie une ArrayList, il ne pourra utiliser qu'une ArrayList ou une classe fille. Mais cela limite fortement le choix...
    • En utilisant une List, on le laisse libre de choisir l'implémentation qu'il souhaite voir de les encapsuler. De plus on ne perd quasiment aucune possibilité vu que la quasi-totalité des méthodes d'ArrayList sont défini dans l'interface List...
    • En utilisant une Collection on laisse un choix encore plus grand (notamment avec les Set) mais on perd l'accès via index (donc cela dépend des besoins de la méthode).
    • De même avec Iterable (Java 5.0) on n'autorise que l'itération mais sur n'importe quel objet qui possède une méthode iterator()...



    Bref ceci permet de se libérer complètement de l'implémentation...

    a++

  6. #6
    Membre expérimenté Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2004
    Messages
    896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2004
    Messages : 896
    Points : 1 595
    Points
    1 595
    Par défaut
    Resalut,

    Citation Envoyé par adiGuba
    Comme le dit yann2, les profs de Java ne sont pas tous très à jours et continue à utiliser leurs vieux cours...
    Oui enfin la deuxième année on a eu un super cours sur les structures de données. Nous avons donc appris à utiliser l'API collection JAVA et maintenant nous savons pourquoi nous utilisons une ArrayList au lieu d'une LinkedList (enfin normalement on le sait ). Je voulais ajouter ça parce les profs d'IUT étaient vraiment impliqués dans leur travail c'était vraiment motivant et il faut bien que je le leur rende.

    Finalement, je pense que commencer par Vector n'est pas si mal...

  7. #7
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    avril 2002
    Messages
    13 935
    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 935
    Points : 22 988
    Points
    22 988
    Billets dans le blog
    1
    Par défaut
    yann2 >> ce n'était pas vraiment une critique mais un fait...

    Bien sûr l'apprentissage d'un langage et des abstractions et différentes notions de POO n'est pas forcément évident, sans compter les différentes contraintes de temps...

    Mais bon je ne vois pas en quoi ce serait plus compliqué d'utiliser ArrayList lors de l'apprentissage

    a++

  8. #8
    Membre habitué Avatar de BlackWood
    Profil pro
    Inscrit en
    mai 2004
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2004
    Messages : 167
    Points : 169
    Points
    169
    Par défaut
    Citation Envoyé par adiGuba
    Mais bon je ne vois pas en quoi ce serait plus compliqué d'utiliser ArrayList lors de l'apprentissage
    Ayant été également formé à l'IUT, je n'ai pas échappé à ce fameux Vector. Pour ma part, je ne pense pas que ce soit une erreur... En fait, Vector se rapproche fort d'un simple tableau[]. Quand on apprend les bases de la programmation et Java, il est important de bien assimiler tous ses concepts.
    Par exemple, passer d'un tableau à Vector est simple : on imagine trés bien la classe Vector. En revanche, passer directement à ArrayList aurait été plus confus que de découvrir plus tard que c'est un "Vector amélioré".
    BlackWood
    Et comme apparemment, ça fait "class" dans une signature :
    , , , ,

  9. #9
    Membre expérimenté Avatar de BainE
    Inscrit en
    mai 2004
    Messages
    1 326
    Détails du profil
    Informations forums :
    Inscription : mai 2004
    Messages : 1 326
    Points : 1 426
    Points
    1 426
    Par défaut
    Salut,

    je pense que les gens qui arrivent du C++ ont également tendance a retrouvé leurs petits avec ca.
    Meme nom meme fonction (a peu pres).
    Ca ne s'arretera jamais.

    et puis je suis d'avis de l'incompétance des profs a se remettre au gout du jour.
    Avant y'avait Vector ca marchait bien pourquoi aller voir plus loin...
    Java 5 et alors moi Java 1.1
    "vaste programme"

  10. #10
    Membre expérimenté Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2004
    Messages
    896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2004
    Messages : 896
    Points : 1 595
    Points
    1 595
    Par défaut
    Citation Envoyé par adiGuba
    yann2 >> ce n'était pas vraiment une critique mais un fait...
    Oui, ne t'inquiète pas, je ne l'avais pas pris comme ça. Des profs qui aprennent plus que les élèves j'en ai vus pas mal par la suite

    Citation Envoyé par adiGuba
    Mais bon je ne vois pas en quoi ce serait plus compliqué d'utiliser ArrayList lors de l'apprentissage
    Oui effectivement l'utilisation d'ArrayList est aussi simple que Vector.

  11. #11
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    avril 2002
    Messages
    13 935
    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 935
    Points : 22 988
    Points
    22 988
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par BlackWood
    Pour ma part, je ne pense pas que ce soit une erreur... En fait, Vector se rapproche fort d'un simple tableau[].
    Tout comme ArrayList (array == tableau )

    Citation Envoyé par BlackWood
    Par exemple, passer d'un tableau à Vector est simple : on imagine trés bien la classe Vector. En revanche, passer directement à ArrayList aurait été plus confus que de découvrir plus tard que c'est un "Vector amélioré".
    ArrayList n'est pas un Vector amélioré, mais un Vector non-synchronisé... et je doute fortement que le multithread soit très présent lors de l'apprentissage du langage...

    De plus du fait de son évolution afin d'être compatible avec l'API de Collection, Vector possède un grand nombre de méthodes en double (add()/addElement(), elementAt()/get() etc.) qui la rend plus complexe qu'ArrayList...

    Pour les mêmes fonctionnalités, Vector possède 42 méthodes, contre 19 pour ArrayList... alors je ne vois pas en quoi ArrayList est plus confuse...

    a++

  12. #12
    Membre régulier
    Inscrit en
    février 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : février 2006
    Messages : 93
    Points : 102
    Points
    102
    Par défaut
    La réponse pour moi est toute simple, va sur la page des cours java de ce site, etc choisis en un, la plupart parlent de vector et pas de ArrayList.
    Personnellement j'ai appris java comme ca, à partir de cours trouvés sur le web, jamais vu de ArrayList avant de trainer sur ce forum...

  13. #13
    Membre émérite
    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
    Points : 2 993
    Points
    2 993
    Par défaut
    Citation Envoyé par Babaôrom
    La réponse pour moi est toute simple, va sur la page des cours java de ce site, etc choisis en un, la plupart parlent de vector et pas de ArrayList.
    Personnellement j'ai appris java comme ca, à partir de cours trouvés sur le web, jamais vu de ArrayList avant de trainer sur ce forum...
    Simplement parce que les gens qui t'ont appris java ne sont pas à jour (pareil à l'iut, et un an après la sortie de java 1.5 ils ne savaient même pas ce que c'était que les generics).

    Je ne vois aucune raison d'utiliser Vector, à part pour la compatibilité ascendante...

  14. #14
    Membre confirmé Avatar de Satch
    Homme Profil pro
    Hypnothérapeute - Magicien
    Inscrit en
    mars 2004
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Hypnothérapeute - Magicien

    Informations forums :
    Inscription : mars 2004
    Messages : 498
    Points : 628
    Points
    628
    Par défaut
    Citation Envoyé par ®om
    Je ne vois aucune raison d'utiliser Vector, à part pour la compatibilité ascendante...
    Ou pour avoir une liste synchronisée ?
    Je sais que désormais vivre est un calembour,
    La mort est devenue un état permanent,
    Le monde est aux fantômes, aux hyènes et aux vautours.
    Moi je vous dis bravo et vive la mort.

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

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : juin 2005
    Messages : 687
    Points : 3 135
    Points
    3 135
    Par défaut
    Citation Envoyé par Satch
    Ou pour avoir une liste synchronisée ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Collections.synchronizedList(List<T> list)

  16. #16
    Membre confirmé Avatar de Satch
    Homme Profil pro
    Hypnothérapeute - Magicien
    Inscrit en
    mars 2004
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Hypnothérapeute - Magicien

    Informations forums :
    Inscription : mars 2004
    Messages : 498
    Points : 628
    Points
    628
    Par défaut
    Je l'avais oublié celui là tellement je ne m'en sers jamais.
    Je sais que désormais vivre est un calembour,
    La mort est devenue un état permanent,
    Le monde est aux fantômes, aux hyènes et aux vautours.
    Moi je vous dis bravo et vive la mort.

  17. #17
    Membre habitué Avatar de BlackWood
    Profil pro
    Inscrit en
    mai 2004
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2004
    Messages : 167
    Points : 169
    Points
    169
    Par défaut
    Citation Envoyé par adiGuba
    Pour les mêmes fonctionnalités, Vector possède 42 méthodes, contre 19 pour ArrayList... alors je ne vois pas en quoi ArrayList est plus confuse...
    Bah disons que s'il avait fallu coder une telle classe avec des connaissances trés basiques en Java, elle aurait plus ressemblé à Vector qu'à ArrayList. Du moins, je l'ai ressenti comme ça. Avec l'expérience, on en serait effectivement arrivé à ArrayList. Toutes deux remplissent la même fonction, sauf qu'ArrayList est optimisé. D'ailleurs, c'est un peu ce qu'a fait Sun, non ? Sinon, ArrayList aurait été présent dès Java 1.0...

    Bon, aprés, je ne défends pas Vector, loin de là ! Mais si j'avais eu en cours ArrayList<int> tab = new ArrayList<int>(), je me serai dit : "Houlà, c'est quoi que ces '<>' ",etc. même si ça me paraît extremment évident aujourd'hui. Ca dépend des gens tout ça, de toute façon.
    BlackWood
    Et comme apparemment, ça fait "class" dans une signature :
    , , , ,

  18. #18
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    avril 2002
    Messages
    13 935
    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 935
    Points : 22 988
    Points
    22 988
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ®om
    Je ne vois aucune raison d'utiliser Vector, à part pour la compatibilité ascendante...
    Mis à part pour générer du code compatible avec les versions inférieur à la 1.2, ou si tu utilises des API avec ce niveau de compatibilité (comme Swing par exemple).


    Citation Envoyé par BlackWood
    Toutes deux remplissent la même fonction, sauf qu'ArrayList est optimisé.
    ArrayList n'est pas plus optimisé que Vector ! La principale différence est qu'elle n'est pas synchronisée et qu'elle respecte complètement l'API de Collection...


    Citation Envoyé par BlackWood
    D'ailleurs, c'est un peu ce qu'a fait Sun, non ? Sinon, ArrayList aurait été présent dès Java 1.0...
    Elle était présente depuis Java 1.0 : elle s'appelait Vector

    Avec Java 1.2 l'API de Collection a corrigé les défauts des collections de bases de Java qu'étaient Vector, Hashtable et Stack...
    Si ces classes n'ont pas été supprimé c'est avant tout pour conserver une compatibilité...

    Citation Envoyé par BlackWood
    Mais si j'avais eu en cours ArrayList<int> tab = new ArrayList<int>(), je me serai dit : "Houlà, c'est quoi que ces '<>' ",etc. même si ça me paraît extremment évident aujourd'hui.
    Les Generics c'est encore autre chose !!! Et ils s'appliquent également à Vector...



    a++

  19. #19
    Membre habitué Avatar de BlackWood
    Profil pro
    Inscrit en
    mai 2004
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2004
    Messages : 167
    Points : 169
    Points
    169
    Par défaut
    Citation Envoyé par adiGuba
    ArrayList n'est pas plus optimisé que Vector ! La principale différence est qu'elle n'est pas synchronisée et qu'elle respecte complètement l'API de Collection...
    Citation Envoyé par adiGuba
    Avec Java 1.2 l'API de Collection a corrigé les défauts des collections de bases de Java qu'étaient Vector, Hashtable et Stack...
    Justement ! C'est mieux => optimisé.

    Bon, ok. Je me tais !

    Citation Envoyé par adiGuba
    Les Generics c'est encore autre chose !!! Et ils s'appliquent également à Vector
    Ca, par contre, je ne savais pas...
    BlackWood
    Et comme apparemment, ça fait "class" dans une signature :
    , , , ,

  20. #20
    Membre émérite
    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
    Points : 2 993
    Points
    2 993
    Par défaut
    Citation Envoyé par moritan
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Collections.synchronizedList(List<T> list)
    Et en plus, Collections.synchronizedList(new ArrayList<String>()), est plus rapide que new Vector<String>() (à l'utilisation, pas à l'initialisation, ce qui n'aurait aucun intérêt)

Discussions similaires

  1. [manuels unix]Pourquoi tant de haine ?
    Par xavlours dans le forum La taverne du Club : Humour et divers
    Réponses: 5
    Dernier message: 23/09/2006, 13h48
  2. utilisation classe vector et supression de doublons
    Par vandevere dans le forum SL & STL
    Réponses: 1
    Dernier message: 30/06/2005, 12h17
  3. Problème d'utilisation de vector
    Par loupdeau dans le forum SL & STL
    Réponses: 12
    Dernier message: 28/02/2005, 13h05
  4. TQuery : pourquoi tant de lenteurs
    Par lgirard dans le forum Bases de données
    Réponses: 4
    Dernier message: 20/04/2004, 11h15

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