vector : problème accès aux caractères d'1 élé

vector : problème accès aux caractères d'1 élé - Java - Programmation

Marsh Posté le 20-06-2008 à 16:29:58    

Bonjour,
 
J'ai construit un vector de CubicCurve qui sont ensuite dessinées.
déclaration du vector : private Vector monTbCourbes;
création du vector : monTbCourbes = new Vector();
dans une boucle, j'ai mis des CubicCurve dans le vector : monTbCourbes.add(new CubicCurve2D.Double(x1, y1, cx1, cy1, cx2, cy2, x2, y2));
 Jusque-là pas de problème, je dessine les différentes courbes avec une boucle : g2D.draw((CubicCurve2D)monTbCourbes.get(i));
mais j'ai dû rajouter (CubicCurve) car sinon il y avait une erreur dans Eclipse monTbCourbes.get(i) était considéré comme un objet et non comme un shape.
 
Ce que je voudrai, c'est pourvoir retrouver pour chaque CubicCurve les points (x1, y1, cx1, cy1, cx2, cy2, x2, y2),
mais je cale.
J'imaginais un truc du genre : monTbCourbes.get(i).getX1  
Ne devrai-je pas pouvoir appliquer les méthodes de la CubicCurve aux éléments du Vector ?
 ou ai-je fait une erreur bête ?
 
Merci de m'aider.
 
P.S. Quelle est la différence entre get(i) et elementAt(i) d'un vector ?

Reply

Marsh Posté le 20-06-2008 à 16:29:58   

Reply

Marsh Posté le 20-06-2008 à 17:59:14    

Citation :

mais j'ai dû rajouter (CubicCurve) car sinon il y avait une erreur dans Eclipse monTbCourbes.get(i) était considéré comme un objet et non comme un shape.


C'est normal, la méthode get retourne un Object, donc quand tu sort un élément de la liste, tu dois le caster avant de pouvoir utiliser ses méthodes.
Depuis Java 5, tu peux utiliser le mécanisme de Generics pour "simplifier" ça.
 
elementAt est une méthode qui date de la préhistoire et qui n'est conservée que pour garder la compatibilité, il faut lui préférer get(i)

Reply

Marsh Posté le 20-06-2008 à 19:57:33    

Merci pour ta réponse. Je vais chercher sur internet "generics".

Reply

Marsh Posté le 20-06-2008 à 20:33:10    

Accessoirement, il est conseillé d'utiliser ArrayList plutôt que Vector


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 20-06-2008 à 20:52:48    

mais lorsque l'on ne connaît pas le nombre d'objets qui seront créés, ne faut-il pas utiliser Vector ?

Reply

Marsh Posté le 20-06-2008 à 20:59:56    

Non. Vector est une des collections originelles de Java qui a été rétrofitté par la suite c'est la raison par exemple de la duplication entre Vector#get et Vector#elementAt, Vector#elementAt est la méthode originelle alors que Vector#get est celle qui a été ajoutée à la sortie de Java 1.2 quand ils ont modifié Vector pour hériter de List.
 
ArrayList, elle, est une classe créée spécialement pour le framework Collections dans 1.2, elle a les mêmes cas d'utilisation que Vector mais des performances potentiellement supérieures (Vector est synchronisé dans toutes ses méthodes, pas ArrayList) et une interface plus agréable (puisque cohérente et sans duplications)


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 21-06-2008 à 17:00:09    

CdE a écrit :

ArrayList est à préférer à Vector dans la majorité des cas, sauf multi-threading et accès concurrentiels à la collection car ArrayList n'est pas thread safe (Mais Vector est plus lourd, oui)


Non, si on a besoin d'avoir une arraylist thread-safe on utilise Collections#synchronizedList pour décorer son arraylist, ou alors on regarde s'il n'y a pas une collection plus adaptée dans java.util.concurrent

 

Il n'y a strictement aucune raison d'utiliser Vector ou Hashtable, dans quelque situation que ce soit.


Message édité par masklinn le 21-06-2008 à 17:00:39

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 21-06-2008 à 18:41:43    

En vous lisant et en regardant sur : http://www.developpez.net/forums/s [...] p?t=495611
il me semble qu'il faut préférer ArrayList à Vector et Array à ArrayList.
Pour revenir à mon problème de départ, j'ai trouvé une solution en passant par un objet intermédiaire:
shape1 = (CubicCurve2D) petales.get(i);
je peux ensuite récupérer la variable que je voulais : shape1.getX1()
Merci pour tout.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed