Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2015
    Messaggi
    31

    HashMap di riferimenti ad oggetti

    Salve a tutti, avrei bisogno di un suggerimento. All'interno del mio programma ho una serie di oggetti di un certo tipo contenuti all'interno di altri oggetti (e da lì creati).
    Per spiegarmi meglio, è come avere per esempio A1 che contiene B1, B2; A2 che contiene B3, B4, B5, ...etc.
    Volendo ottenere l'insieme di tutti questi oggetti (B) li ho raccolti tutti in una HashMap in cui la chiave è l'id e il valore è l'oggetto i-esimo B. Ora, vorrei che ogni modifica sull'oggetto B della mappa coinvolga anche l'oggetto di partenza contenuto nell'oggetto A. La mappa cioè dovrebbe contenere dei riferimenti, non creare delle copie. Come posso fare?
    Grazie in anticipo

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Naomi92 Visualizza il messaggio
    Per spiegarmi meglio, è come avere per esempio A1 che contiene B1, B2; A2 che contiene B3, B4, B5, ...etc.
    Volendo ottenere l'insieme di tutti questi oggetti (B) li ho raccolti tutti in una HashMap in cui la chiave è l'id e il valore è l'oggetto i-esimo B. Ora, vorrei che ogni modifica sull'oggetto B della mappa coinvolga anche l'oggetto di partenza contenuto nell'oggetto A. La mappa cioè dovrebbe contenere dei riferimenti, non creare delle copie. Come posso fare?
    Scusa ma non è molto chiaro ..... non ho capito granché. Puoi mostrare del codice? Come è dichiarata la mappa? Puoi descrivere o mostrare le classi (anche solo abbozzate) coinvolte come chiavi e/o valori?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2015
    Messaggi
    31
    In maniera estremamente abbozzata ho qualcosa del genere:
    codice:
     
    class B {
    int ID;
    Object oggettoAssociato;
    }
    class A {
    
    ArrayList<B> listaB;
    
    }
    
    class C {
    ArrayList<A> lista A;
    
    }
    
    class D {
    HashMap<Integer, B> mappaB;
    }
    C'è un oggetto di classe C che contiene una lista di oggetti di classe A.
    Ogni oggetto di classe A contiene una lista di oggetti di classe B (ognuno ha un proprio ID e degli attributi tra cui un oggetto di un'altra classe ancora).
    Nella classe D prendo tutti gli oggetti B "sparsi" nelle varie classi A e li inserisco in una HashMap.
    Spero di essermi spiegata meglio
    Mi sono però accorta che se modifico l'oggetto B i-esimo nella hashMap, ad esempio settandogli un oggetto associato, allora anche l'oggetto B corrispondente nella classe A risulta coinvolto nella modifica. Quindi non dovrei avere problemi. E' corretto?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Naomi92 Visualizza il messaggio
    Mi sono però accorta che se modifico l'oggetto B i-esimo nella hashMap, ad esempio settandogli un oggetto associato, allora anche l'oggetto B corrispondente nella classe A risulta coinvolto nella modifica.
    Come dicevi prima "La mappa cioè dovrebbe contenere dei riferimenti". Sì, contiene riferimenti. Quindi gli oggetti che hai creato e hai incastonato in questa grossa struttura dati sono sempre quelli, indipendentemente da come ci arrivi successivamente. Non ci sono "copie" di oggetti (a meno che sia tu espressamente a farle).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2015
    Messaggi
    31
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Come dicevi prima "La mappa cioè dovrebbe contenere dei riferimenti". Sì, contiene riferimenti. Quindi gli oggetti che hai creato e hai incastonato in questa grossa struttura dati sono sempre quelli, indipendentemente da come ci arrivi successivamente. Non ci sono "copie" di oggetti (a meno che sia tu espressamente a farle).
    Perfetto, avevo un (bel) po' di confusione a riguardo, grazie mille per il chiarimento Un'altra cosa...se da un'istanza i-esima della classe A (quella contenente una porzione degli oggetti di tipo B presenti nel programma), accedo alla lista contenente i propri oggetti B ("listaB") e ne rimuovo uno, la mappa ("mappaB"), quella che li contiene TUTTI, ne risente oppure no?
    Io credo di no, perchè le due strutture dati dovrebbero essere indipendenti pur avendo riferimenti agli stessi oggetti. No?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Naomi92 Visualizza il messaggio
    se da un'istanza i-esima della classe A (quella contenente una porzione degli oggetti di tipo B presenti nel programma), accedo alla lista contenente i propri oggetti B ("listaB") e ne rimuovo uno, la mappa ("mappaB"), quella che li contiene TUTTI, ne risente oppure no?
    Se in un oggetto A hai la listaB che contiene un oggetto B chiamiamolo b1 e questo b1 è anche contenuto come valore nella mappaB di un oggetto D, se tu rimuovi b1 dalla listaB, esso continua a rimanere nella mappaB dell'oggetto D.

    Qui infatti non è questione del cambio di stato dell'oggetto B ma della modifica di una struttura dati (il ArrayList in A) che è ovviamente distinta dal HashMap in D.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2015
    Messaggi
    31
    Ottimo, è proprio il comportamento che desidero
    Grazie per la delucidazione!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.