Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Rimuovere ridondanze da ArrayList

    Salve a tutti,
    ho il seguente problema da risolvere: ho come input un ArrayList di Archi fatto cosi:

    Arco(c1,c9)
    Arco(c9,c1)
    Arco(c2,c3)
    Arco(c3,c2)
    Arco(c7,c4)
    Arco(c10,c11)
    Arco(c4,c7)
    Arco(c11,c10)..ecc ecc

    Dovrei scrivere una funzione java che dato questo ArrayList, rimuova tutti gli archi "ridondanti" cioè quelli che portano le stesse informazioni es: Arco(c1,c9) e Arco(c9,c1) sono praticamente lo stesso arco.

    Per essere piu chiaro il mio output dovrebbe essere:

    Arco(c1,c9)
    Arco(c2,c3)
    Arco(c7,c4)
    Arco(c10,c11)..ecc ecc

    Qualcuno potrebbe darmi una mano?
    Grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Rimuovere ridondanze da ArrayList

    Originariamente inviato da tommi1288
    Dovrei scrivere una funzione java che dato questo ArrayList, rimuova tutti gli archi "ridondanti" cioè quelli che portano le stesse informazioni es: Arco(c1,c9) e Arco(c9,c1) sono praticamente lo stesso arco.
    E quei c1, c9 ecc... tecnicamente, che cosa sono e come sono rappresentati in Arco? Sono stringhe? Sono un altro tipo di oggetti? Se così, 2 c9 in Archi differenti fanno riferimento allo stesso oggetto? (=identità di reference) O può comunque essere verificata l'uguaglianza di "significato" (contenuto)?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Ho una classe nodo: il cui costruttore instanzia un oggetto di tipo nodo caratterizzato da delle coordinate e da un nome ( es : c1) e una classe arco il cui costruttore instanzia un oggetto di tipo arco caratterizzato da un nodo di partenza dell'arco e uno di destinzazione. Es c1 è nodo di partenza e c9 di arrivo o destinazione.
    C1 , C9 e così via identificano sempre il solito nodo.

  4. #4
    E si 2 c9 in archi differenti fanno riferimento al solito oggetto.

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da tommi1288
    Ho una classe nodo: il cui costruttore instanzia un oggetto di tipo nodo caratterizzato da delle coordinate e da un nome ( es : c1) e una classe arco il cui costruttore instanzia un oggetto di tipo arco caratterizzato da un nodo di partenza dell'arco e uno di destinzazione. Es c1 è nodo di partenza e c9 di arrivo o destinazione.
    C1 , C9 e così via identificano sempre il solito nodo.
    Ok, è chiaro. E non ha quindi molta importanza allora se es. arco1.partenza e arco2.destinazione fanno riferimento ad uno stesso identico oggetto nodo descritto "c9" oppure se fanno riferimento a 2 nodi distinti ognuno descritto con "c9".
    Non ha importanza appunto perché in ogni caso puoi verificare l'uguaglianza di "significato" di due nodi basandoti sul nome.

    Una possibilità per verificare se un Arco con quella coppia di nodi/nomi è già stato "visitato" scorrrendo la lista è quello di sfruttare un Set (es. HashSet) che non ammette duplicati.
    Scorri la lista e verifichi se la coppia di nomi è già presente nel Set. Se è già presente, devi scartare l'Arco, altrimenti inserisci la informazione nel Set.

    Questo tecnicamente puoi farlo:

    1) inserendo nel Set una stringa che compone i nomi dei due nodi dell'Arco es. "c1-c9" (se mettere un separatore e quale lo scegli tu). Non mi piace tanto questa soluzione però, perché devi stabilire un ordine preciso sulla sequenza dei nomi. Arco(c1,c9) e Arco(c9,c1) devono essere rappresentati dalla stessa stringa.

    2) inserendo nel Set direttamente gli Arco se: Arco ha il metodo equals implementato per dire se 2 Arco sono "uguali" in tal senso es. Arco(c1,c9) uguale a Arco(c1,c9) oppure Arco(c1,c9) uguale a Arco(c9,c1). E anche se hashCode è stato implementato per rispettare il contratto con equals.
    Se fai la cosa in modo oculato: equals di Arco invocherà equals sui nodi e ogni nodo avrà equals che confronta il nome (due nodi sono "uguali" se hanno lo stesso nome).

    3) inserendo nel Set oggetti di una nuova classe es. CoppiaNodi in modo concettualmente simile al punto 2). Ma solo se, per qualche motivo, non puoi usare la soluzione 2).

    La preferibile è la 2).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Ho capito! Ci provo.
    Ti ringrazio molto per l'aiuto.

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.