从ArrayList中删除项目

我有一个ArrayList假设list ,它有8个项目AH,现在我想删除list存储在int数组中的1,3,5位置的项目,我该怎么做。

我正在尝试这样做

 ArrayList<String> list = new ArrayList<String>(); list.add("A"); list.add("B"); list.add("C"); list.add("D"); list.add("E"); list.add("F"); list.add("G"); list.add("H"); int i[] = {1,3,5}; for (int j = 0; j < i.length; j++) { list.remove(i[j]); } 

但是在第一项删除数组定位之后,在下一次迭代中删除错误的元素或者给出exception。

在这种特定情况下 ,应该按降序删除元素。 先索引5 ,然后是3 ,然后是1 。 这将从列表中删除元素,而不会产生不良副作用。

 for (int j = i.length-1; j >= 0; j--) { list.remove(i[j]); } 

您可以使用ListIteratorArrayList移除元素,

 ListIterator listIterator = List_Of_Array.listIterator(); /* Use void remove() method of ListIterator to remove an element from List. It removes the last element returned by next or previous methods. */ listIterator.next(); //remove element returned by last next method listIterator.remove();//remove element at 1st position listIterator.next(); listIterator.next(); listIterator.remove();//remove element at 3rd position listIterator.next(); listIterator.next(); listIterator.remove();//remove element at 5th position 
  public void DeleteUserIMP(UserIMP useriamp) { synchronized (ListUserIMP) { if (ListUserIMP.isEmpty()) { System.out.println("user is empty"); } else { Iterator<UserIMP> it = ListUserIMP.iterator(); while (it.hasNext()) { UserIMP user = it.next(); if (useriamp.getMoblieNumber().equals(user.getMoblieNumber())) { it.remove(); System.out.println("remove it"); } } // ListUserIMP.remove(useriamp); System.out.println(" this user removed"); } Constants.RESULT_FOR_REGISTRATION = Constants.MESSAGE_OK; // System.out.println("This user Deleted " + Constants.MESSAGE_OK); } } 
 String[] mString = new String[] {"B", "D", "F"}; for (int j = 0; j < mString.length-1; j++) { List_Of_Array.remove(mString[j]); } 

如前所述

 iterator.remove() 

也许是在循环中删除列表项的唯一安全的方法。

为了更深入地理解使用迭代器删除项目,请尝试查看此线程

这个怎么样? 只要给它一个思考,

 import java.util.ArrayList; class Solution { public static void main (String[] args){ ArrayList<String> List_Of_Array = new ArrayList<String>(); List_Of_Array.add("A"); List_Of_Array.add("B"); List_Of_Array.add("C"); List_Of_Array.add("D"); List_Of_Array.add("E"); List_Of_Array.add("F"); List_Of_Array.add("G"); List_Of_Array.add("H"); int i[] = {1,3,5}; for (int j = 0; j < i.length; j++) { List_Of_Array.remove(i[j]-j); } System.out.println(List_Of_Array); } } 

而输出是 –

 [A, C, E, G, H] 

试试这个方法,

 ArrayList<String> List_Of_Array = new ArrayList<String>(); List_Of_Array.add("A"); List_Of_Array.add("B"); List_Of_Array.add("C"); List_Of_Array.add("D"); List_Of_Array.add("E"); List_Of_Array.add("F"); List_Of_Array.add("G"); List_Of_Array.add("H"); int i[] = {5,3,1}; for (int j = 0; j < i.length; j++) { List_Of_Array.remove(i[j]); } 

arraylist的remove(int index)方法删除列表中指定位置(索引)处的元素。 删除arraylist项目后,任何后续的元素左移。

意思是如果一个数组列表包含{20,15,30,40}

我已经调用了方法:arraylist.remove(1)

那么数据15将被删除,30&40这两个项目将被左移1。

出于这个原因,你必须先删除更高的数组索引项。

所以..为你的情况..代码将..

 ArrayList<String> list = new ArrayList<String>(); list.add("A"); list.add("B"); list.add("C"); list.add("D"); list.add("E"); list.add("F"); list.add("G"); list.add("H"); int i[] = {1,3,5}; for (int j = i.length-1; j >= 0; j--) { list.remove(i[j]); } 

我假设数组我被提升sorting,这里是Iterator的另一个解决scheme,它是更通用的:

 ArrayList<String> list = new ArrayList<String>(); list.add("A"); list.add("B"); list.add("C"); list.add("D"); list.add("E"); list.add("F"); list.add("G"); list.add("H"); int i[] = {1,3,5}; Iterator<String> itr = list.iterator(); int pos = 0; int index = 0; while( itr.hasNext() ){ itr.next(); if( pos >= i.length ){ break; } if( i[pos] == index ){ itr.remove(); pos++; } index++; } 

如果使用“=”,则会为第二个数组中的原始数组创build副本,但引用相同,因此如果您在一个列表中更改,另一个也将被修改。 用这个代替“=”

  List_Of_Array1.addAll(List_Of_Array);