Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2583 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  comment supprimer proprement les doublons d'un tableau d'objet ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

comment supprimer proprement les doublons d'un tableau d'objet ?

n°487111
xtoune
Posté le 14-08-2003 à 13:43:57  profilanswer
 

comment supprimer proprement les doublons d'un tableau d'objet ?


---------------
heu...
mood
Publicité
Posté le 14-08-2003 à 13:43:57  profilanswer
 

n°487152
Krueger
tout salaire demande dutravail
Posté le 14-08-2003 à 14:15:05  profilanswer
 

Tu peux utiliser java.util.Set.


---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi
n°490040
xtoune
Posté le 18-08-2003 à 10:37:53  profilanswer
 

autre chose ?


---------------
heu...
n°490071
darklord
You're welcome
Posté le 18-08-2003 à 10:52:14  profilanswer
 

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


---------------
Just because you feel good does not make you right
n°490082
benou
Posté le 18-08-2003 à 10:56:50  profilanswer
 

sauf que pour un Set ce serait plutot hashCode ou un Comparator à implémenter  :whistle:


---------------
ma vie, mon oeuvre - HomePlayer
n°490091
darklord
You're welcome
Posté le 18-08-2003 à 11:03:57  profilanswer
 

benou a écrit :

sauf que pour un Set ce serait plutot hashCode ou un Comparator à implémenter  :whistle:  


 
vi vi desolaid  :ange:


---------------
Just because you feel good does not make you right
n°490145
Krueger
tout salaire demande dutravail
Posté le 18-08-2003 à 12:13:19  profilanswer
 

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é :whistle: ).
 
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... [:spamafote]


---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi
n°490164
xtoune
Posté le 18-08-2003 à 12:35:49  profilanswer
 

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


Message édité par xtoune le 18-08-2003 à 12:36:10

---------------
heu...
n°490165
darklord
You're welcome
Posté le 18-08-2003 à 12:39:39  profilanswer
 

dans ton objet noeud tu fais la chose suivante
 

Code :
  1. public class Node {
  2.   private int x;
  3.   private int y;
  4.   public boolean equals(Object o) {
  5.      if (o == this) return true;
  6.      if (!(o instanceof Node)) return false;
  7.      final Node node = (Node) o;
  8.      if ((node.x == this.x) && (node.y == this.y))
  9.          return true;
  10.      else
  11.          return false;
  12.   }
  13. }


 
avec ca tu peux utiliser par exemple une ArrayList à la place d'un tableau et faire
 

Code :
  1. if (!maList.contains(monobjet))
  2.     maList.add(monobject);


 
sachant que monobjet sera tjrs du type node


Message édité par darklord le 18-08-2003 à 12:52:24

---------------
Just because you feel good does not make you right
n°490169
xtoune
Posté le 18-08-2003 à 12:48:55  profilanswer
 

ok ok  
merci  
 
juste une erreur d'initation :
 
c node.x et node.y et non pas o.x et o.y


---------------
heu...
mood
Publicité
Posté le 18-08-2003 à 12:48:55  profilanswer
 

n°490171
darklord
You're welcome
Posté le 18-08-2003 à 12:52:09  profilanswer
 

xtoune a écrit :

ok ok  
merci  
 
juste une erreur d'initation :
 
c node.x et node.y et non pas o.x et o.y


 
en effet :o


---------------
Just because you feel good does not make you right
n°490172
benou
Posté le 18-08-2003 à 12:53:30  profilanswer
 

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 ?


---------------
ma vie, mon oeuvre - HomePlayer
n°490230
darklord
You're welcome
Posté le 18-08-2003 à 14:24:12  profilanswer
 

benou a écrit :


dark, il sert à quoi ton "final" quand tu déclares la variable node ?


 

Citation :


Declare method arguments final if they are not modified in the method. In general declare all variables final if they are not modified after being initialized or set to some value.


 
http://www.javaperformancetuning.com/tips/final.shtml


---------------
Just because you feel good does not make you right
n°490249
benou
Posté le 18-08-2003 à 14:34:21  profilanswer
 

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 ...


---------------
ma vie, mon oeuvre - HomePlayer
n°490262
darklord
You're welcome
Posté le 18-08-2003 à 14:44:38  profilanswer
 

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 ...)
 


---------------
Just because you feel good does not make you right
n°490270
xtoune
Posté le 18-08-2003 à 14:47:19  profilanswer
 

une autre question vite fait en passant, by the way :
 
 
g une methode :  
 

Code :
  1. public void valueChanged ( ListSelectionEvent evt ) {
  2. Object src = evt.getSource();
  3. if ( src.equals( playList ) && playList.hasFocus() ) {
  4. noeudList.setSelectedIndices(playList.getSelectedIndices());
  5. }
  6. if ( src.equals( noeudList ) ) {
  7. cadreVisu.drawGrille();
  8. }
  9. }


 
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 ?


---------------
heu...
n°490348
Krueger
tout salaire demande dutravail
Posté le 18-08-2003 à 15:55:18  profilanswer
 

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. [:spamafote]


---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi
n°490455
xtoune
Posté le 18-08-2003 à 17:21:13  profilanswer
 

moi j'aimerai bien pouvoir vider le buffer qui contient les evenement provenant de NoeudList par exemple


---------------
heu...
n°490468
darklord
You're welcome
Posté le 18-08-2003 à 17:27:05  profilanswer
 

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


Message édité par darklord le 18-08-2003 à 17:27:11

---------------
Just because you feel good does not make you right

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  comment supprimer proprement les doublons d'un tableau d'objet ?

 

Sujets relatifs
Variable dans tableau ...Création, emploi de librairies statiques avec GCC [proprement résolu]
[Python]Ordonner une liste d'objet (sorting)Conception objet
Comment afficher un panorama proprement et legerement...[vbscript] - supprimer une ligne dans un fichier
tableau[$mavariabledetypenumér ique+1] ne fonctionne pas.Mettre le focus sur la derniere ligne d'un tableau
[php] tableau d'objet possible ou pas? 
Plus de sujets relatifs à : comment supprimer proprement les doublons d'un tableau d'objet ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR