No desenvolvimento do projeto, muitas vezes precisamos excluir dinamicamente alguns elementos na lista Arraylist.
Uma maneira errada:
<pre nome = "code"> para (int i = 0, len = list.size (); i <len; ++ i) {if (list.get (i) == xxx) {list.remove (i); }}O método acima lançará a seguinte exceção:
Exceção no tópico "principal" java.lang.indexoutOfBoundSexception: Índice: 3, tamanho: 3 em java.util.arraylist.ranngecheck (fonte desconhecida) em java.util.arraylist.get (fonte desconhecida) em listdemo.main (listdemo.java:20)
Como você excluiu o elemento, mas não mudou o subscrito de iteração, de modo que, quando a iteração atingir a última, uma exceção será lançada.
O programa acima pode ser melhorado da seguinte maneira:
for (int i = 0, len = list.size (); i <len; ++ i) {if (list.get (i) == xxx) {list.remove (i); --len; // Reduce um}}O código acima está correto.
Vamos apresentar outra solução:
A interface da lista implementa a interface do iterador internamente, fornecendo ao desenvolvedor um iterator () para obter um objeto iterador do objeto atual da lista.
Iterator <string> slistIterator = list.iterator (); while (slistiterator.hasnext ()) {string e = slistiterator.Next (); if (E.Equals ("3")) {slistiterator.remove (); }}O acima também está correto e a segunda solução é recomendada.
Os princípios de implementação das duas soluções são iguais, e o segundo é apenas encapsulado pelo JDK.
Ao visualizar o código -fonte da ArrayList, você descobrirá que muitos métodos são implementados internamente com base na interface do iterador, para que a segunda solução seja recomendada.
O exposto acima é o conteúdo inteiro do método para excluir elementos específicos no loop Java Collection Arraylist trouxeram a você. Espero que todos suportem wulin.com ~