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é
    [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é
    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
    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é
    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
    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++
    Cette signature n'a pas pu être affichée car elle comporte des erreurs.

  6. #6
    Membre expérimenté
    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
    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++
    Cette signature n'a pas pu être affichée car elle comporte des erreurs.

  8. #8
    Membre habitué
    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é
    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
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     .
          .
     .

    "vaste programme"

  10. #10
    Membre expérimenté
    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
    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++
    Cette signature n'a pas pu être affichée car elle comporte des erreurs.

  12. #12
    Membre régulier
    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
    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é
    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
    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é
    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é
    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
    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++
    Cette signature n'a pas pu être affichée car elle comporte des erreurs.

  19. #19
    Membre habitué
    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
    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)