2014-05-23 1 views
0

mon principal problème est le "ConcurrentModificationException". Je souhaite supprimer une ligne, lorsqu'elle est trouvée. mais ma liste n'est pas mise à jour après la suppression de la ligne. Donc, je reçois le défaut. Je ne sais pas comment le résoudre. Je lis déjà ici, google, quelques livres mais je ne sais pas comment le résoudre avec un objet [] dans une liste ... c'est beaucoup pour moiConcurrentModificationException (liste <object []>) ou une autre structure de données pour "recherche/comparaison et filtrage"

Ou est-il préférable d'utiliser une autre structure de données pour trier et chercher, si oui, lequel serait bon (il y a beaucoup de données dans l'objet liste []) Et comment pourrais-je le convertir en cette structure de données?

Désolé pour les questions débutant ... Merci pour vos réponses!

List<Object[]> allIds est un paramètre;

  for (Object[] privateIds : allIDs) { 


     for (Object[] comparePrivateIdS : allIds) { 

      if (privateIds[1].equals(comparePrivateIdS[1]) && privateIds[2].equals(comparePrivateIdS[2])) { 
       System.out.print("ok"); 

       int index = allIds.indexOf(comparePrivateIdS); 
       allIds.remove(comparePrivateIdS); 

      } else { 
       System.out.println("Do Nothing"); 
      } 
     } 
+0

Voir http://stackoverflow.com/questions/1675037/removing-items-from-a-collection-in-java-while-iterating -par-dessus – DirkyJerky

Répondre

1

Vous ne pouvez pas appeler allIds.remove(...) en itérer sur allIds, cela jette le ConcurrentModificationException. Au lieu de cela, vous devez utiliser une méthode iterator explicite et appeler son remove:

for (Iterator<Object[]> it = allIds.iterator(); it.hasNext();) { 
    Object[] comparePrivateIdS = it.next(); 
    //... 
    if(...) it.remove(); 
} 
Questions connexes