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.
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.
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![]()
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 :Envoyé par moritan
ça on aurait jamais compris :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Vector vector = 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).
Code : Sélectionner tout - Visualiser dans une fenêtre à part Collection col = new Vector();
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 :
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(ArrayList<?> arraylist);
Code : Sélectionner tout - Visualiser dans une fenêtre à part public void maMethode(List<?> list);voir même :
Code : Sélectionner tout - Visualiser dans une fenêtre à part public void maMethode(Collection<?> c);
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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part public void maMethode(Iterable<?> i);
- 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++
Resalut,
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 saitEnvoyé par adiGuba
). 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...
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++
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.Envoyé par adiGuba
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é".
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![]()
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 suiteEnvoyé par adiGuba
![]()
Oui effectivement l'utilisation d'ArrayList est aussi simple que Vector.Envoyé par adiGuba
Tout comme ArrayList (array == tableauEnvoyé par BlackWood
)
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...Envoyé par BlackWood
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++








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).Envoyé par Babaôrom
Je ne vois aucune raison d'utiliser Vector, à part pour la compatibilité ascendante...
Ou pour avoir une liste synchronisée ?Envoyé par ®om
![]()
Envoyé par Satch
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Collections.synchronizedList(List<T> list)
Je l'avais oublié celui là tellement je ne m'en sers jamais.
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...Envoyé par adiGuba
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.
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).Envoyé par ®om
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...Envoyé par BlackWood
Elle était présente depuis Java 1.0 : elle s'appelait VectorEnvoyé par BlackWood
![]()
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é...
Les Generics c'est encore autre chose !!! Et ils s'appliquent également à Vector...Envoyé par BlackWood
a++
Envoyé par adiGuba
Justement ! C'est mieux => optimisé.Envoyé par adiGuba
Bon, ok. Je me tais !
Ca, par contre, je ne savais pas...Envoyé par adiGuba
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)Envoyé par moritan
Partager