Problèmes faciles à rencontrer dans la liste par lots des méthodes de partition de classe d'outil Apache et Guava

Contexte : Le code java est divisé en lots et en listes divisées, qui sont réalisés à l'aide des outils d'apche et de goyave (pour des méthodes spécifiques d'utilisation de cet outil, voir le lien: https://blog.csdn.net/Mint6/article / details / 102875247 ) L'appel de remove dans le processus foreach après la segmentation signalera une erreur java.util.NoSuchElementException

Raison : apache et goyave divisent la liste, les deux utilisent une fausse division subLis t, la liste est toujours la liste d'origine, mais selon la taille passée, chaque sous-section est pointée par une nouvelle référence de liste. Comme le montre la figure ci-dessous: La petite liste ne génère pas de nouvel objet, donc la modification de la petite liste modifiera toujours le contenu de la liste globale.

Démo de cas d'erreur

public class PartialListRemoveError {

    public static void main(String[] args) {
        List<Integer> intList1 = Lists.newArrayList(1, 2, 3, 4, 5, 6, 7, 8);
        List<List<Integer>> subs1 = Lists.partition(intList1, 3);
        for (List<Integer> list : subs1) {
            list.clear();
            System.out.println("输出总list" + intList1);
        }
    }
}

Résultat de l'exécution du code:

输出总list[4, 5, 6, 7, 8]
输出总list[4, 5, 6]
Exception in thread "main" java.util.NoSuchElementException
	at java.util.AbstractList$Itr.next(AbstractList.java:364)
	at formal.util.list.PartialListRemoveError.main(PartialListRemoveError.java:17)

Résumé : Étant donné que chaque référence de petite liste est toujours la liste globale de la direction, lorsque le contenu de la petite liste est supprimé, le contenu de la liste globale est supprimé. Ceci est converti en un problème que la liste ne peut pas être supprimée pendant foreach (voir un autre article pour ce problème: 1. Démonstration d'erreur : https://blog.csdn.net/Mint6/article/details/81047349  2. Analyse d'erreur : https : //blog.csdn.net/mint6/article/details/77684609 )

Solution : générez une nouvelle utilisation de la petite liste à l'intérieur.

 

Je suppose que tu aimes

Origine blog.csdn.net/Mint6/article/details/102875278
conseillé
Classement