comment supprimer proprement les doublons d'un tableau d'objet ? - Java - Programmation
Marsh Posté le 14-08-2003 à 14:15:05
Tu peux utiliser java.util.Set.
Marsh Posté le 18-08-2003 à 10:52:14
donne plus de détails si la réponse de Krueger ne te satisfait pas. Je pense que ce krueger te propose, c'est changer le container de manière à ce que tu ne puisses pas avoir de doublons.
Maintenant si tu as ce tableau en paramètre et que tu ne peux pas le changer, alors sa solution n'est pas valide.
De manière générale il ne faut pas t'attendre à des réponses fleuves avec si peux de détails. Toute solution dépend de son environnement.
Par exemple, tu peux redéfinir la méthode equals() des objets qui sont dans ton tableau et utiliser un truc du genre
if (!moncont.contains(monobject)
moncont.add(monobject);
mais bon ca reviens au meme que d'utiliser Set.
Bref, donne des détails
Marsh Posté le 18-08-2003 à 10:56:50
sauf que pour un Set ce serait plutot hashCode ou un Comparator à implémenter
Marsh Posté le 18-08-2003 à 11:03:57
benou a écrit : sauf que pour un Set ce serait plutot hashCode ou un Comparator à implémenter |
vi vi desolaid
Marsh Posté le 18-08-2003 à 12:13:19
En fait, dans l'interface java.util.List il y a la méthode toArray(Object[]) qui retourne un tableau dont le type correspond à celui spécifié en paramètre.
D'un autre côté, l'interface java.util.Set permet de gérer un ensemble d'objets sans doublons, comme ça a été dit ci-dessus.
Pour le mapping tableau d'objet vers Collection, la méthode asList(Object[]) de la classe java.util.Arrays te retourne un objet java.util.List (j'avais oublié d'en parler, désolé ).
Au final, on aurait eu un code du genre :
1. Construire une liste à partir du tableau.
2. Construire un ensemble à partir de cette liste.
3. Extraire de cet ensemble le tableau sans les doublons !
C'est la méthode que je souhaitais proposer implicitement. J'ai cru que tu aurais plus cherché, mais bon...
Marsh Posté le 18-08-2003 à 12:35:49
dsl pour le manque de presision, c vrai que c un peu light.
en fait je passe en parametre un tableau d'object ( qui sont des objet noeud avec plein de variable, dont x et y )
dans ce tableau il peut y avoir plusieur fois le meme noeud ( meme x et y mais pas meme instance)
moi je ne veux pas de c doublons.
La j'ai une methode qui fonctionne, j'ajout dans mon tableau de sorti mes noeuds en verifiant kil n'y sont pas deja ( un for et un if a la con à remplacé pkoi pas par un comparator).
Sinon je viens d'avoir une idée, j'ajoute tout mes noeud dans un tableau [x][y] avec en x et y les x et y de mes noeuds, et je retourne le tableau sans les cases null.
je vais peut etre faire ca
merci
Marsh Posté le 18-08-2003 à 12:39:39
dans ton objet noeud tu fais la chose suivante
Code :
|
avec ca tu peux utiliser par exemple une ArrayList à la place d'un tableau et faire
Code :
|
sachant que monobjet sera tjrs du type node
Marsh Posté le 18-08-2003 à 12:48:55
ok ok
merci
juste une erreur d'initation :
c node.x et node.y et non pas o.x et o.y
Marsh Posté le 18-08-2003 à 12:52:09
xtoune a écrit : ok ok |
en effet
Marsh Posté le 18-08-2003 à 12:53:30
xtoune a écrit : c node.x et node.y et non pas o.x et o.y |
oui.
dark, il sert à quoi ton "final" quand tu déclares la variable node ?
Marsh Posté le 18-08-2003 à 14:24:12
benou a écrit : |
Citation : |
http://www.javaperformancetuning.com/tips/final.shtml
Marsh Posté le 18-08-2003 à 14:34:21
mouais c'est ce que j'imaginais mais ca sert à quoi concrétement ? le compilo est capable de voir si y a une autre affectation => il peut optimiser lui même ...
Marsh Posté le 18-08-2003 à 14:44:38
benou a écrit : mouais c'est ce que j'imaginais mais ca sert à quoi concrétement ? |
à optimiser le code, sachant qu'equals a des chances d'etre appellés très souvent (-> qd tu fais contains sur une arraylist il appelle equals sur sa collection qd meme ...)
Marsh Posté le 18-08-2003 à 14:47:19
une autre question vite fait en passant, by the way :
g une methode :
Code :
|
ca marche bien qd je selectionne un à un les element de playList.
Le pb c quand je selectionne par un ctrl-a ( ou avec maj) :
ctrl-a : un evenement déclenché donc un appel de valueChanged avec comme source playlist.
par contre si mon ctrl-a à selectionné 50 element, j'ai 50 évenement donc 50 appelle de valueChanged avec comme source noeudList....
pour l'instant Pour contourner le pb j'utilise une variable qui decompte le nombre d'évenement ( ici 50,49,... et à 0 je fais mon traitement ) :-(
mais c pas le top, vous connaissez la solution ?
Marsh Posté le 18-08-2003 à 15:55:18
Pour l'instant je ne vois rien d'autre qu'un thread qui reçoit les requêtes de mise à jour pour les bufferiser et les traiter simultanément s'il y en a plusieurs dans un intervalle de temps très court.
J'ai essayé de trouver un moyen de changer le comportement du ListSelectionListener dans le cas où il y a plusieurs nouvelles sélections simultanées, mais en vain.
Marsh Posté le 18-08-2003 à 17:21:13
moi j'aimerai bien pouvoir vider le buffer qui contient les evenement provenant de NoeudList par exemple
Marsh Posté le 18-08-2003 à 17:27:05
xtoune a écrit : moi j'aimerai bien pouvoir vider le buffer qui contient les evenement provenant de NoeudList par exemple |
ouvre un nouveau sujet avec un titre explicite. Ca n'a rien à voir avec ta question initiale
Marsh Posté le 14-08-2003 à 13:43:57
comment supprimer proprement les doublons d'un tableau d'objet ?
---------------
heu...