Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 27
  1. #1

    [JAVA] Modifiche di dati all'interno di una LinkedList

    Volevo sapere come si poteva modificare dai dati all'interno di una LinkedList dopo averne analizzato il contenuto.

    Non riesco a trovare la soluzione con Iterator.

    Grazie

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

    Re: [JAVA] Modifiche di dati all'interno di una LinkedList

    Originariamente inviato da mark85_159622
    Volevo sapere come si poteva modificare dai dati all'interno di una LinkedList dopo averne analizzato il contenuto.

    Non riesco a trovare la soluzione con Iterator.
    Iterator ti fornisce man mano gli oggetti della collezione e ti permette di rimuoverli con remove(). Se vuoi modificare lo stato di un oggetto (ammesso che sia "mutabile") questo ovviamente puoi sempre farlo.
    Se invece l'oggetto non è mutabile e vuoi proprio mettere al suo posto un altro oggetto, solo con Iterator non puoi.

    Nota che LinkedList offre un altro iteratore:

    public ListIterator<E> listIterator(int index)

    e ListIterator ha un set(E), quindi in questo caso puoi settare un altro oggetto!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    E se io invece usassi una HashMap che dopo trovata la chiave modifica il secondo campo.
    con get se uso la stesso chiave mi sovrascrive i campi precedenti oppure no?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da mark85_159622
    E se io invece usassi una HashMap che dopo trovata la chiave modifica il secondo campo.
    con get se uso la stesso chiave mi sovrascrive i campi precedenti oppure no?
    Per secondo campo .... intendi il "valore" della map, presumo. Se fai un put() di un altro valore, ovvio che cambia la associazione chiave-valore! Cioè la chiave farà riferimento al nuovo valore.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    OK, Grazie.

    Iterator e' presente anche per le HashMap???

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da mark85_159622
    Iterator e' presente anche per le HashMap???
    No ... allora non ci siamo. HashMap non fornisce direttamente iteratori. Devi prendere il Set delle entry, oppure il Set delle chiavi. Ed è Set che fornisce l'iteratore.

    Ma attenzione! Se prendi il set delle entry e lo iteri, puoi solo rimuovere con remove() dell'iteratore oppure usare setValue() sulla entry. Non puoi fare put() o altra modifica diretta sulla Map durante la iterazione.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    No, mi spiego meglio.

    Io ho una file con una chiave e una stringa.

    Key1 String1
    Key2 String2
    ecc...

    Puo' capitare che io debba modificare una stringa associata a una certa chiave.

    Quindi cosa faccio:

    1) prende il file e carico tutto all'interno di una HasMap
    2) prendo la chiave cercata e modifico il valore della Stringa
    3) ricopio tutte nel file.

    Il problema e' il terzo punto. Nel file dovro' di nuovo copiare Chiave e Stringa.

    Spero di essere stato piu' chiaro.

    Questa e' la situazione nel complesso.

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da mark85_159622
    Quindi cosa faccio:

    1) prende il file e carico tutto all'interno di una HasMap
    2) prendo la chiave cercata e modifico il valore della Stringa
    3) ricopio tutte nel file.

    Il problema e' il terzo punto. Nel file dovro' di nuovo copiare Chiave e Stringa.
    Ho capito ... è legato all'altra tua discussione.
    Comunque il punto 3 è semplice: puoi iterare sulle entry (hai già chiave+valore) oppure iterare sulle chiavi. L'iteratore ti darà le chiavi e userai get() sulla Map per ottenere il valore (questo puoi farlo durante la iterazione!). Tutto qui.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Io usato questo tipo di codice per il terzo punto

    codice:
    private int WriteFile( String PathOfFile )
    {
    /* File to write */
    File fw;
    FileOutputStream fos;
    PrintStream ps;
    Set e = LineOfFile.entrySet();
    Iterator it = e.iterator();	
    		
    try
    {
    fw = new File( PathOfFile );
    fos = new FileOutputStream( fw ); 
    ps = new PrintStream( fos );
    
    while (it.hasNext()) 
    {
    Map.Entry en = (Map.Entry) it.next();
    ps.println( entry.getKey() + " " + entry.getValue() );
    }
    }	
    catch ( IOException e ) 
    { 
      return -1; 
    } 
      return 0;
    }

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da mark85_159622
    Io usato questo tipo di codice per il terzo punto
    Dal punto di vista della iterazione e accesso a chiave/valore, ok è corretto. Dal punto di vista della gestione del file e delle eccezioni ... no, purtroppo.

    Per caso hai principalmente esperienze in altri linguaggi "procedurali" (es. C, Pascal, altri ...)?? In questi altri linguaggi (dove non ci sono le "eccezioni") è praticamente la prassi comune fare funzioni che ritornano uno "status" o dei "codici di errore", per esempio 0 = successo, 1 = errore X, 2 = errore Y o altre cose simili.
    Bene, in Java no. In Java ci sono le eccezioni e dovrebbero essere sfruttate al meglio.

    Il tuo metodo dovrebbe avere tipo di ritorno void e dichiarare che può lanciare IOException. E inoltre non hai chiuso lo stream, cosa che è da fare in qualunque caso, anche se una eccezione esce dal metodo. E la eccezione va gestita altrove più "al di sopra".

    Ti posto la versione corretta, scritta seguendo le convenzioni "standard" per la scrittura di codice Java:

    codice:
    private void writeFile(String filename) throws IOException {
        Iterator it = lineOfFile.entrySet().iterator();
        FileOutputStream fos = null;
        PrintStream ps = null;
    
        try {
            fos = new FileOutputStream(filename);
            ps = new PrintStream(fos);
    
            while (it.hasNext()) {
                Map.Entry entry = (Map.Entry) it.next();
                ps.println(entry.getKey() + " " + entry.getValue());
            }
        } finally {
            if (ps != null) {
                ps.close();
            } else if (fos != null) {
                fos.close();
            }
        }
    }
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.