Visualizzazione dei risultati da 1 a 2 su 2

Discussione: [java] gestione Lista

  1. #1

    [java] gestione Lista

    salve ragazzi ho questo esercizio da fare ho un lista per ogni elemento lo devo valutare e rimetterlo in coda alla lista
    Esempio:

    Quote:
    for(Object obj:listEntityName)
    {
    runValutate(obj);
    listEntityName.add(obj);
    }
    però cosi mi da un'eccezzione come posso fare?
    devo metterlo per forza in coda

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

    Re: [java] gestione Lista

    Originariamente inviato da bobby_fire
    salve ragazzi ho questo esercizio da fare ho un lista per ogni elemento lo devo valutare e rimetterlo in coda alla lista
    Esempio:

    Quote:
    for(Object obj:listEntityName)
    {
    runValutate(obj);
    listEntityName.add(obj);
    }
    però cosi mi da un'eccezzione come posso fare?
    Sì, la eccezione è ConcurrentModificationException e succede perché la maggior parte delle collezioni standard in java.util ha un iteratore che ha un comportamento detto "fail-fast". L'iteratore verifica se la collezione è stata modificata strutturalmente in qualunque modo (eccetto tramite il remove() dell'iteratore stesso o anche il add() se fosse un ListIterator) e in tal caso lancia ConcurrentModificationException.
    E il "for-each" usato nel tuo codice fa usare sotto-sotto di nascosto l'iteratore.

    Soluzioni? Sì, ci sono:

    1) Inserire gli elementi in una nuova collezione a parte, quindi dopo che la iterazione è terminata aggiungi tutti gli elementi con addAll(). Questa funziona senza problemi.

    2) Non usi (esplicitamente o implicitamente che sia) un iteratore ma usi il classico ciclo for con l'indice. Questo funziona ma devi stare attento ... stai aggiungengo sulla stessa lista su cui scansioni, quindi nel test indice<lunghezza del for, dovresti tenerti un lunghezza con il valore iniziale della lista, altrimenti se usassi indice<list.size() potenzialmente andresti avanti pure sugli elementi aggiunti.

    3) Usi esplicitamente un ListIterator che ha il add() che funziona correttamente (è la eccezione detta sopra). Anche qui c'è da stare attenti come al punto 2).
    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.