Utilisation d'une ArrayList - Java - Programmation
Marsh Posté le 02-12-2002 à 16:12:24
T'as lu la doc ?
Pour appliquer à une List, la méthode sort de Collections, il faut que tous les éléments de la liste implémentent l'interface Comparable ! Tu vois bien que StringBuffer l'implémente pas.
Sinon, tu peux utiliser plutot
public static void sort(List list, |
de la classe Collections...
Marsh Posté le 02-12-2002 à 16:27:37
El_Gringo a écrit a écrit : T'as lu la doc ? Pour appliquer à une List, la méthode sort de Collections, il faut que tous les éléments de la liste implémentent l'interface Comparable ! Tu vois bien que StringBuffer l'implémente pas. Sinon, tu peux utiliser plutot
de la classe Collections... |
Pour le Collections.Sort -> ok je vais regarder.
Par contre, pour la premiere partie de ma question, est-ce-que tu as une idée ?
Marsh Posté le 02-12-2002 à 16:38:53
El_Gringo a écrit a écrit : Bah ça viens surement de ton algo : debug ! |
A priori, en convertissant mon StringBuffer en String, tout à l'air d'être rentré dans l'ordre ...
Y'aurait mieux à faire ?
Sinon Merci (si oui aussi d'ailleurs)
Marsh Posté le 02-12-2002 à 16:59:37
PERSEPOLIS a écrit a écrit : A priori, en convertissant mon StringBuffer en String, tout à l'air d'être rentré dans l'ordre ... Y'aurait mieux à faire ? Sinon Merci (si oui aussi d'ailleurs) |
ha mon avis, c ce que t'as de mieux à faire, c clair !
Marsh Posté le 02-12-2002 à 17:59:44
Bah, si tu réfléchis 5 minutes, tu te rendras compte que c'est tout à fait normal, comme comportement : tu fais :
Code :
|
donc, tu ajoutes à chaque fois à ton arraylist, une référence vers une même instance de StringBuffer : donc, quand tu accèdes à tes éléments, tu obtiens toujours la même instance!!
En revanche, si tu fais : listVL.add(versionLog.toString());
ben tu ajoutes dans ta liste une nouvelle instance de String, qui contient le contenu de versionLog au moment de l'appel..
C'est pas tout de trouver des solutions, il faut aussi piger pourquoi elles marchent!
Marsh Posté le 03-12-2002 à 09:33:45
gfive a écrit a écrit : Bah, si tu réfléchis 5 minutes, tu te rendras compte que c'est tout à fait normal, comme comportement : tu fais :
|
Fo croire Ke C pas donne à tous le monde de reflechir comme toi ???
Marsh Posté le 03-12-2002 à 10:26:11
bah, c'est pas une manière de réfléchir!!!! C'est le comportement NORMAL..Enfin, je sais pas, moi!! Réfléchit 2 secondes : tu ajoutes à chaque position de ton arraylist un MEME OBJET!!! Il est pas dupliqué lors de l'ajout...donc, si tu le modifies, tu as beau y accéder par la première ou la dernière position de ta liste, ben tu accèdes toujours au même objet!!
Marsh Posté le 03-12-2002 à 10:31:49
gfive a écrit a écrit : bah, c'est pas une manière de réfléchir!!!! C'est le comportement NORMAL..Enfin, je sais pas, moi!! Réfléchit 2 secondes : tu ajoutes à chaque position de ton arraylist un MEME OBJET!!! Il est pas dupliqué lors de l'ajout...donc, si tu le modifies, tu as beau y accéder par la première ou la dernière position de ta liste, ben tu accèdes toujours au même objet!! |
T'as tout à fait raison mais c'est vrai que j'ai encore du mal à refléchir en terme d'objet ...
Une leçon de plus...
Marsh Posté le 03-12-2002 à 10:47:55
gfive a écrit a écrit : bah, c'est pas une manière de réfléchir!!!! C'est le comportement NORMAL..Enfin, je sais pas, moi!! Réfléchit 2 secondes : tu ajoutes à chaque position de ton arraylist un MEME OBJET!!! Il est pas dupliqué lors de l'ajout...donc, si tu le modifies, tu as beau y accéder par la première ou la dernière position de ta liste, ben tu accèdes toujours au même objet!! |
gfive> Pour la défense de persepolis, raisonner en termes d'objets partagés n'est pas du tout naturel. On y vient, certes, mais quand on vient (en particulier) du monde C++, c'est très déroutant au début.
J'ai même connu une époque (désormais révolue) où la condition suivante était toujours fausse en Java :
Code :
|
parce que la chaîne littérale "toto" était équivalente à l'expression new String("toto" )...
Marsh Posté le 03-12-2002 à 10:59:03
benou a écrit a écrit : le == pour comparer les String c'est mal !!! |
ouais qd meme
Marsh Posté le 03-12-2002 à 11:17:37
c pas que c mal le == avec les String, c que ca marche pas.
J aime bien dire quand le code y marche pas
Marsh Posté le 03-12-2002 à 11:17:40
C'est une erreur que quasiment tous les débutants Java faisaient il y a quelques années. Et comme par hasard, ils venaient tous du monde C/C++.
Et pourquoi écrivaient-ils ces lignes ? Parce qu'en C++, on mélange allègrement identité et valeur des objets, concepts que Java a clairement séparés. Et on en revient précisément à la question première de ce topic...
edit> Je vous signale qu'avec les versions actuelles de Java, le code suivant affiche toujours "Vrai".
Code :
|
Marsh Posté le 03-12-2002 à 11:26:04
bha ouais on sait ! Mais c'est un "coup de bol" est c'est loin d'être garantie !
c'est juste parce que les objets de type String sont mit en cache.
Marsh Posté le 03-12-2002 à 11:32:44
benou a écrit a écrit : bha ouais on sait ! Mais c'est un "coup de bol" est c'est loin d'être garantie ! c'est juste parce que les objets de type String sont mit en cache. |
...uniquement ceux qui sont construit à partir d'une chaine en dur, style "toto", non ?
parce que ça :
Code :
|
ça marche pas, si !?
Marsh Posté le 03-12-2002 à 11:51:49
non, ca marche pas : t'utilise un new donc c'est réellement une nouvelle instance mais y a pas que les chaines en dur qui sont cachées :
Code :
|
ca ca affiche
|
Marsh Posté le 02-12-2002 à 16:08:40
Bonjour,
j'ai un petit problème pour remplir une ArrayList.
J'ai X fois le dernier element insere et ensuite mon Collections.sort bloque le traitement ...
---------------------------------------
Code :
Dans une boucle j'ai
versionLog.setLength(0);
....
listVL.add(versionLog); //versionLog est un StringBuffer
----------------------------------
A la sortie de la boucle :
Collections.sort(listVL);
---------------
Evite les personnes arrogantes et vulgaires, elles sont un tourment pour l'esprit.