IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

map et réferences.


Sujet :

Collection et Stream Java

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 151
    Par défaut map et réferences.
    Bonjour, voici un code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    Map<String, Integer> map = new Hashtable<String, Integer>();
            map.put("un", 1);
            map.put("deux", 2);
            map.put("trois", 3);
            map.put("quatre", 4);
            map.put("cinq", 346);
            List<Map<String, Integer>> listeA = new ArrayList<Map<String,Integer>>();
            listeA.add(map);
            List<Map<String, Integer>> listeB = new ArrayList<Map<String,Integer>>();
            listeB.add(map);
     
            List<Map<String, Integer>> listeC = new ArrayList<Map<String,Integer>>();
            listeC.add(map);
            System.out.println("Contenu de map");
            Iterator<Integer> it = map.values().iterator();
            while(it.hasNext()){
                System.out.print(it.next() + " ");
            }
            System.out.println();
     
            System.out.println("Contenu de listeA");
            Map<String, Integer> mA = listeA.get(0);
            Iterator< Integer>itA =mA.values().iterator();    
            while(itA.hasNext()){
                System.out.print(itA.next() + " ");    
            }
            System.out.println();
            System.out.println("Contenu de listeB");
            Map<String, Integer> mB = listeB.get(0);
     
     
            Iterator< Integer>itB =mB.values().iterator();    
            while(itB.hasNext()){
                System.out.print(itB.next() + " ");    
            }
     
            System.out.println();
            System.out.println("Contenu de listeC");
            Map<String, Integer> mC = listeC.get(0);
            Iterator< Integer>itC =mC.values().iterator();    
            while(itC.hasNext()){
                System.out.print(itC.next() + " ");    
            }
    resultat : Contenu de map
    1 2 3 346 4
    Contenu de listeA
    1 2 3 346 4
    Contenu de listeB
    1 2 3 346 4
    Contenu de listeC
    1 2 3 346 4
    Quand je modifie le contenu de map , je modifie le contenu des listeA,B,C, ce qui est normal.
    La question : Comment changer le contenu de listeA et listeB sans changer map?
    D'une façon generale il y a t il un gadget pour obtenir une liste d'objets identiques mais avec des reférences differentes ? sans cloner mes objets?
    Mon algorithme sur 8000 polygones contenus dans des paires en depend .
    Merci

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 151
    Par défaut Map et références
    Je crois que j'ai trouvé . Il me faut créer pour chaque liste chaque map mais avec les mêmes contenus.
    Faut croire que je n'ai pas vraiment réfléchi.
    huuumm ça rique d'être lourd non ?
    svp ?

  3. #3
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    NON.

    C'est simple, n'est-ce pas

  4. #4
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    Oui c'est normal.

    En java, ce que tu ajoutes dans tes 3 listes, c'est une référence (un pointeur, si tu as déjà fait du C), vers ton objet Map.

    Donc, les 3 listes pointent vers le même objet. Si tu modifies celui-ci, tu le modifies pour les 3 listes.

    Si tu veux des objets différents, il ne faut pas enregistrer l'objet original, mais des copies de cet objet. Elles seront alors indépendantes.

    Et justement à cause de ce problème de références, la plupart des classes Java proposent une méthode "clone()" qui permet d'obtenir une copie identique de ton objet. Et lorsque tu modifies cette copie indépendante, ça n'impacte plus l'objet original.

    Cette dernière affirmation est toutefois à nuancer en fonction du type de clonage ("superficiel" ou "en profondeur"), mais là on rentre dans les détails. Si tu veux approfondir le sujet, fait une recherche sur ces termes. Dans ton cas, si un clonage superficiel te suffit, il te permettrait peut-être de répondre à ton besoin sans écrouler les performances de ton programme!

    [EDIT] Doublement grillé [/EDIT]
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  5. #5
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Excuse, j'ai répondu en même temps que toi.

    ... mais il faut plus réfléchir à la solution que tu présentes

    Pour solutionner ton problème il faut :
    1. selon la quantité des objets que tu manipules, et la mémoire dont tu disposes, réfléchir à des versions ligths de ces objets... souvent on utilise le pattern muable / immuable (l'immuable étant normalement plus léger)... Si tu n'as pas besoin de les rendre persistants, un bon truc aussi est le hashcode, tout simplement.
    2. réfléchir aux frontières de valeurs entre les objets, les processus, etc, et cloner aux passages.
    3. ici, à priori, ce qu'il faudra cloner, c'est les map, et non pas les objets.

    Bon courage.

    PS : et pense à la balise CODE la prochaine fois sinon tu te feras gronder.

  6. #6
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Là tu veux juste une copie de ta liste, mais tu ne veux pas cloner en profondeur...

    Utilise donc le constructeur HashMap(Map).
    Tu passes ta liste source en paramètre du constructeur...

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 151
    Par défaut hashcode ?
    gifffftane==>Je te remercie des conseils. Et je penserai a la balise code explique moi un peu plus stp comment faire pour le hashcode

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 151
    Par défaut çà marche pas
    En fait mon idée n'est pas bonne.
    Er réalité pour les besoins ce ne sont pa s des map que j'ai mais des classes "doublets" que j'ai créées.
    voici le code du test:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    for(int i = 0; i!=pts.length; ++i){//...
    EntitesSimules simulesExploitation = new EntitesSimules(); //ma copie
    	Iterator<Simule> iterateur = simules.creerIterateur(); // simules est l'agregat  dont je copie les elements
    	while(iterateur.hasNext()){
    	Simule s = iterateur.next();
    	simulesExploitation.ajouter(s); //je copie chaque element
    			}
    doublets[i] = new  DoubletExplSimules(arrayExpl[i],simulesExploitation); 
    //et plein d'autre choses 
    }
    Vous ne pensiez pas à cela peut être ?

    Donc quand je change une valeur de s dans simules et bien le même changement est effectué dans mes doublets .Visiblement le reference est concervée sur chaque objet s.

    Or si je veux cloner il me faudra modifier toutes les classes dependantes -trop long , trop long

  9. #9
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Bon... à force d'aller d'idées pas bonnes en solutions trouvées, je suis paumé... pourrais-tu nous expliquer de façon générale ce que tu veux faire, sans employer les mots map, liste, clone, bref sans rien d'informatique ??

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 151
    Par défaut allocation de parcelles paysagères
    Citation Envoyé par gifffftane
    Bon... à force d'aller d'idées pas bonnes en solutions trouvées, je suis paumé... pourrais-tu nous expliquer de façon générale ce que tu veux faire, sans employer les mots map, liste, clone, bref sans rien d'informatique ??
    gifffftane ==>avec plaisir
    Il s'agit d'allouer des polygones à un ensemble de points suivant la distance minimale de chaque point aux polygones.
    Chaque point dispose d'une surface maximale à ne pas dépasser. Ainsi avant d'allouer un polygone à un point on regarde sa surface et sa distance au point et la surface maximale allouable à ce point.
    voila qui est dit ...

  11. #11
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Arg ! J'ai oublié de te dire de parler comme tout le monde... bon, je vais quand même essayer...

    J'imagine que tu as ta liste de points, et, à chaque point, ta surface maximale allouable ; cela fait un premier, disons, map.

    Questions : le nombre de points est-il fixe, les points sont-ils des objets immuables, et la surface maximale allouable à chaque point est-elle fixe ?

    Ensuite tu as une liste de polygones, qui, si j'ai bien compris ta prose, déterminent des distance minimales pour chaque point.

    Encore des questions : ces polygones sont-ils fixes, existe-t-il un rapport entre les polygones minimaux et maximaux, la distance minimale est-elle dépendante de chaque point et chaque poligone, peux-tu affecter un même polygone minimal à plusieurs points...

    De ces points, polygones, etc, existe-il des ensembles ordonnés ?

    Il y aurait je pense encore beaucoup de questions, le point essentiel où nous en sommes est de déterminer ce qui est fixe, immuable (éventuellement pour en faire les clefs des maps), de ce qui est mouvant.

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 151
    Par défaut Map et references
    J'imagine que tu as ta liste de points, et, à chaque point, ta surface maximale allouable cela fait un premier, disons, map.
    ==>oui j'ai une liste de points mais leurs nombre n'est pas fixe.

    Questions : le nombre de points est-il fixe, les points sont-ils des objets immuables, et la surface maximale allouable à chaque point est-elle fixe ?
    ==>Les points eux mêmes appartiennent à d'autres polygones.La surface maximale allouable de chaque point est fixéé.


    Ensuite tu as une liste de polygones, qui, si j'ai bien compris ta prose, déterminent des distance minimales pour chaque point.
    ==>Oui tout a fait.


    Encore des questions : ces polygones sont-ils fixes, existe-t-il un rapport entre les polygones minimaux et maximaux, la distance minimale est-elle dépendante de chaque point et chaque poligone, peux-tu affecter un même polygone minimal à plusieurs points...

    ==> Les polygones sont fixes. Le seul rapport entre eux c'est que on peut les attribuer à des points. La distance minimale est dépendante de chaque point (pour chaque point on doit connaitre les distance à chaque polygone).
    Evidemment un polygone est attribuer une fois et une seule fois.
    Ni les points ni les polygones n'appartiennent à des ensembles ordonnés.

    Par contre je ne comprends pas quand tu me dis de parler comme tout le monde .

  13. #13
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Et un point est-il un objet immuable ?

  14. #14
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 151
    Par défaut
    Citation Envoyé par gifffftane
    Et un point est-il un objet immuable ?
    non.

  15. #15
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 697
    Par défaut
    une HashMap non modifiable ça t'interresse? :
    java.util.Collections.unmodifiableMap(HashMap hm)

  16. #16
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 151
    Par défaut
    Citation Envoyé par atha2
    une HashMap non modifiable ça t'interresse? :
    java.util.Collections.unmodifiableMap(HashMap hm)
    Je ne pense pas avoir le besoin. Le fait est que je suis déjà sur une solution qui
    posait quelques problèmes que je ne comprenais pas.
    merci bien.

  17. #17
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Bon, si je comprends bien, il n'y a aucun objet immuable dans cette affaire, donc impossible d'utiliser des maps. (ou peu éléguant).

    La suite sous toutes réserves.

    Je verrais d'un coté une liste des polygones, de l'autre une liste des points.

    Puis tu crées une classe style EspaceAutourDePoint contenant un point, sa distance maximale (qui, si j'ai bien compris, est fixe), un polygone (vide au départ), et une méthode renvoyant la distance minimale en fonction d'un polygone.

    Pour chaque point tu crées un EspaceAutourDePoint et tu mets tout ça dans une liste (cela fait 3 listes).

    Puis pour chaque polygone tu cherches un EspaceAutourDePoint qui convient en parcourant la liste et en activant la méthode de calcul de distance minimale. Lorsque tu l'as trouvé, tu lui affectes un polygone.

    J'ai bon ?...

  18. #18
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 151
    Par défaut
    Citation Envoyé par gifffftane

    J'ai bon ?...
    Heu !!!!
    Ma mise en oeuvre est la suivante:
    Soit donc une liste des polygones (listeVraie), de l'autre une liste des points, comme toi.

    Je fabrique en fait liste de paires (point, liste de polygones) pour tous les points. (3 listes comme toi )

    Cela me permet de trier les polygones de chaque paire par distance croissante à un point.

    En gros une matrice(2*2) .

    Il me suffit maintenant d'itérer pour attribuer reéllement les polygônes aux points.Et un etatDeSurface verifie si une surface peut peut etre allouer ou pas.Dès qu'un polygone est attribué a un point , je mets a jour dans listeVraie(un booleen a true de ce polygone ).
    Et ainsi de suite.

    Qu'en pensez-vous ? C'est que je faisais avant de demander votre aide sur les references.

  19. #19
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Et ben c'est pas mal non plus... on arrive à des solutions proches... mais finalement la question c'est quoi alors ?

  20. #20
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 151
    Par défaut
    Citation Envoyé par gifffftane
    Et ben c'est pas mal non plus... on arrive à des solutions proches... mais finalement la question c'est quoi alors ?
    Mais une matrice 8000 colonnes et quelques centaines de lignes , la mémoire va en souffir , non ?.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Bump mapping
    Par Francky033 dans le forum DirectX
    Réponses: 7
    Dernier message: 22/11/2003, 18h35
  2. [EJB2.1 Entity] [BES] Mapping automatique et clés étrangères
    Par Bobby McGee dans le forum Java EE
    Réponses: 3
    Dernier message: 15/10/2003, 10h33
  3. Réponses: 2
    Dernier message: 11/07/2003, 18h24
  4. Problème avec memory mapping
    Par gemai dans le forum C
    Réponses: 13
    Dernier message: 04/07/2003, 09h50
  5. Editeur de MAP en delphi pour jeux directX
    Par PetitScorpion dans le forum DirectX
    Réponses: 5
    Dernier message: 09/07/2002, 18h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo