OVH Cloud OVH Cloud

Vector et rapidité

18 réponses
Avatar
tsalm
Bonjour,

J'ai un vector qui peut vite devenit volumineux et je dois le parcourir
r=E9gui=E8rement.
Est-ce que c'est plus rapide de passer par un Enumerator ou un Iterator
ou c'est =E9gal =E0 une boucle for et monVecteur.get(i)?

D'avance merci
TSalm

8 réponses

1 2
Avatar
Kupee
Bonjour,

J'ai un vector qui peut vite devenit volumineux et je dois le parcourir
réguièrement.
Est-ce que c'est plus rapide de passer par un Enumerator ou un Iterator
ou c'est égal à une boucle for et monVecteur.get(i)?


A part le fait que le Vector est synchronisé et que tu n'en as peut etre
pas besoin, effectivement je pense qu'un parcours avec des
monVecteur.get(i) devraient etre plus rapides qu'un Iterator (a vrai
dire je n'ai jamais compris l'intéret de l'Iterator a part si on veut
supprimer de éléments pendant le parcours)
si tu es en multithread n'oublie pas de synchroniser autour de ta boucle

Avatar
Kupee
Non, l'idéal c'est une SynchronizedList (obtenu en faisant
java.util.Collections.synchronizedList()).


Oui ca fait plus moderne, mais bon je pense pas qu'on puisse faire la
différence.

Avatar
alexandre cartapanis
Bonjour,

J'ai un vector qui peut vite devenit volumineux et je dois le parcouri r
réguièrement.
Est-ce que c'est plus rapide de passer par un Enumerator ou un Iterato r
ou c'est égal à une boucle for et monVecteur.get(i)?


A part le fait que le Vector est synchronisé et que tu n'en as peut e tre
pas besoin, effectivement je pense qu'un parcours avec des
monVecteur.get(i) devraient etre plus rapides qu'un Iterator (a vrai
dire je n'ai jamais compris l'intéret de l'Iterator a part si on veut
supprimer de éléments pendant le parcours)


Lol, c'est très exactement la raison de la présence de Iterator...

si tu es en multithread n'oublie pas de synchroniser autour de ta boucl e



--
Alexandre CARTAPANIS - Responsable Système et Réseau
Email
Gsm. 06 72 07 51 55

Macymed SARL - 9 bvd Kraëmer 13014 Marseille France
Tél. 04 91 48 31 58 - Fax. 04 91 02 36 47
Web http://www.macymed.fr - Email


Avatar
cilovie
Pour des implémentations performantes de collection(s).
voir http://javolution.org/

Pour iterator versus get(i)

ArrayList implements RandomAccess

http://java.sun.com/j2se/1.4.2/docs/api/java/util/RandomAccess.html

Donc ? ;-)



Bonjour,

J'ai un vector qui peut vite devenit volumineux et je dois le parcourir
réguièrement.
Est-ce que c'est plus rapide de passer par un Enumerator ou un Iterator
ou c'est égal à une boucle for et monVecteur.get(i)?
A part le fait que le Vector est synchronisé et que tu n'en as peut etre

pas besoin, effectivement je pense qu'un parcours avec des
monVecteur.get(i) devraient etre plus rapides qu'un Iterator (a vrai
dire je n'ai jamais compris l'intéret de l'Iterator a part si on veut
supprimer de éléments pendant le parcours)


Lol, c'est très exactement la raison de la présence de Iterator...

si tu es en multithread n'oublie pas de synchroniser autour de ta boucle







Avatar
Kupee
Bonjour,

J'ai un vector qui peut vite devenit volumineux et je dois le parcourir
réguièrement.
Est-ce que c'est plus rapide de passer par un Enumerator ou un Iterator
ou c'est égal à une boucle for et monVecteur.get(i)?
A part le fait que le Vector est synchronisé et que tu n'en as peut etre

pas besoin, effectivement je pense qu'un parcours avec des
monVecteur.get(i) devraient etre plus rapides qu'un Iterator (a vrai
dire je n'ai jamais compris l'intéret de l'Iterator a part si on veut
supprimer de éléments pendant le parcours)


Lol, c'est très exactement la raison de la présence de Iterator...


C'est donc bien ce que je disais.
Et la nouvelle syntaxe de java 1.5
for (Object o: list)

risque de ne pas etre avantageuse car je pense qu'elle passe toujours
par un iterator



Avatar
thomas_escolan
C'est tout chaud, ça vient de sortir :
http://fmora.developpez.com/tutoriel/java/collections/intermediaire/


Bonjour,

J'ai un vector qui peut vite devenit volumineux et je dois le parcourir
réguièrement.
Est-ce que c'est plus rapide de passer par un Enumerator ou un Iterator
ou c'est égal à une boucle for et monVecteur.get(i)?

D'avance merci
TSalm


Avatar
spammed
Je me permet de faire une synthèse et de faire quelques corrections:

1- La classe Vector même si techniquement elle est pas dépreciée,
car trop utilisée, c'est tout comme. Il est donc fortement conseillé
de ne pas l'utiliser pour les raisons de synchro innutiles évoquées
dans les précédents messages.

On peut donc dire java.util.Collections.synchronizedList(new
ArrayList()) aura le même résultat qu'un Vector.

2. Quand tu parles d'utiliser une Collection à la place d'un Vector,
c'est une bêtise car un Vector est une Collection. C'est la super
interface de Set et List.

Donc, tu dois choisir entre deux types de Collection un Set ou une
List; La grande différence entre un Set et une List est que dans le
Set on ne peut pas mettre deux fois le même objet.

3. Supposons que tu es choisi d'utiliser une Liste. Tu as le chois
entre 3 possibilités d'implémentations (classes concrètes) : la
LinkedList, l'ArrayList, le Vector.

On a dit dans le 1 que le Vector on raye des le départ. il te reste
donc 2 choix possibles dans le (JDK Standard).

Il est donc maintenant question de savoir qu'est ce que tu sous entends
par efficacité ?
- Accéde t'on de manière aléatoire (n'importe ou) ou de manière
séquentielle ?
- La liste est elle de taille fixe et déterminée des le départ ?
-

selon les réponses aux questions du dessus tu seras ammené à choisir
une implémentation ou une autre:

Pour dégrossir :

Une ArrayList :
plus rapide sur des petits et moyens tableaux et accessible de
manière random
(http://java.sun.com/j2se/1.5.0/docs/api/java/util/RandomAccess.html)

Une LinkedList :
lent mais coût constant et linéaire que ce soit en ajout ou en
parcours. Eviter les accès par Index get(i).

Si tu ne sais pas trop, le choix par défaut serait à mon avis une
ArrayList.


Plus d'info :
http://java.sun.com/j2se/1.5.0/docs/guide/collections/overview.html


Laurent.

tsalm wrote:

NE JAMAIS UTILISER UN VERTOR


Pourquoi pas ? Si plusieurs threads manipulent ta collection de donn ées,
un Vector est idéal, non ? Dans ce cas, une Arraylist serait suici daire
et le Vector peut être le meilleur choix.

C'est comme Hashtable vs Hashmap en somme...


Non, l'idéal c'est une SynchronizedList (obtenu en faisant
java.util.Collections.synchronizedList()).



En tout cas, ça a le mérite d'être clair :-)
Je ne fait pas de multithreading donc ...je vais tout de suite changer
mes Vectors en Collection
Merci à vous !

Tsalm





Avatar
Lionel
wrote:
1- La classe Vector même si techniquement elle est pas dépreciée,
car trop utilisée, c'est tout comme. Il est donc fortement conseillé
de ne pas l'utiliser pour les raisons de synchro innutiles évoquées
dans les précédents messages.


J'ai également trouvé dans les liens la confirmation de ce que j'ai lu
plusieurs fois sur le groupe anglais de struts: il n'y a aucune différence
de perf entre Vector et Arraylist avec les jvm récentes.

1 2