Java Arraylist eliminar elementos múltiples por índice

Aquí está mi código:

for (int i = 0; i < myarraylist.size(); i++) { for (int j = 0; j < stopwords.size(); j++) { if (stopwords.get(j).equals(myarraylist.get(i))) { myarraylist.remove(i); id.remove(i); i--; // to look at the same index again! } } } 

Tengo el problema .. después de que el elemento quitado, todo el índice cambió siempre, el lazo por arriba tan sucio.

Para ilustrar: Tengo 54 datos, pero el bucle anterior se vuelve desordenado después de eliminar el elemento .. tan sólo 50 datos que se comprueban.

¿Hay otra manera o fijar mi código para quitar el elemento múltiple por el índice ?? Índice de elementos es tan importante para mí, para eliminar otro arraylist que tienen el mismo índice.

Una cosa que debe tener en cuenta es que cuando se utiliza ArrayLists que están destinados a ser versátil, más que Arrays . Puede acortar una matriz quitando un índice completo, añadir un índice a ella y hacer maravillas con ArrayLists .

Este es un problema común con personas que no se dan cuenta, o recuerdan, que cuando se elimina un valor, los índices ArrayList (o lo que sea el plural correcto) se reajustan y el ArrayList acorta.

Al intentar quitar elementos de un ArrayList , siempre debe iniciar al final de la ArrayList .

 for(int x = arrayList.size() - 1; x > 0; x--) { arrayList.remove(x); } 

Esto debe proporcionarle la función que usted está buscando. Echa un vistazo a la API de ArrayList para conocer otros métodos que pueden ayudarte.

Utilice Iterator.remove() para eliminar elementos durante la iteración.

 for (Iterator<String> iter = myarraylist.iterator(); iter.hasNext(); ) { String element = iter.next(); if (element meets some criteria) { iter.remove(); } } 

O utilizar el filtro de Google Guava que devuelve una vista filtrada y deja la lista original sin cambios.

 Iterable<String> filtered = Iterables.filter(myarraylist, new Predicate<String>() { public boolean apply(String element) { return true of false based on criteria } }); 

Parece que desea eliminar una colección de otra .. Debería utilizar java.util.Collection # removeAll método en su lugar

No está seguro de por qué desea hacer esto por índice, pero puede probar esto (no probado):

 int dynamicSize = myarraylist.size(); for (int i = 0; i < dynamicSize; i++) { for (int j = 0; j < stopwords.size(); j++) { if (stopwords.get(j).equals(myarraylist.get(i))) { myarraylist.remove(i); id.remove(i); i--; // to look at the same index again! dynamicSize--; } } } 

Mientras itera la lista y estás quitando el iterador del uso del objeto.

 Iterator myListItr = myarraylist.iterator(); //Iterate on list while(myListItr .hasNext()) { //if stop words is list of string then contains will work as it is. If its your custom object then override equals method. if(stopwords.contains( myListItr.next())){ myListItr.remove(); } } 

Utilizar ListIterator

 ArrayList<String> list = new ArrayList<String>(); // List : ["java", ".net", "javascript", "html", "css", "selenium", "image", "Spring"] ArrayList<Integer> indexes = new ArrayList<Integer>(); // indexes : [5, 3, 2, 5, 0] // Sort the Indexes in Order to remove from back words. and make Unique TreeSet<Integer> uniqueSorted = new TreeSet<Integer>(); uniqueSorted.addAll(indexes); // To remove all elements from the ArrayList and make its size = 0 indexes.clear(); indexes.addAll(uniqueSorted); // Iterate form back, so that if size decreases also no problem. ListIterator<Integer> li = indexes.listIterator(indexes.size()); // we can traverse a List in both the directions (forward and Backward). while(li.hasPrevious()) { int position = li.previous(); list.remove(position); } 
  • PopupWindow sobre el teclado virtual
  • ¿Cómo ejecutar una prueba JUnit4 simple en Android Studio 1.1?
  • Lazy Loading no funciona correctamente
  • Configurar mapa de bits como fondo de la vista de texto - Android
  • ¿Cómo encontrar la raíz de fugas de memoria?
  • La aplicación de Android no se inicia en simulador o hardware
  • Evitar que la dependencia de Gradle para la biblioteca de soporte sea reemplazada por una versión más reciente
  • ¿Cómo obtener un notificador de aplicación PERMANENTE en la barra de estado?
  • La vista de lista de Android ya no resalta la selección onclick
  • Android Realm, objetos de consulta por atributo secundario
  • Android studio no puede resolver el símbolo común, que falta en el paquete android.gms
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.