104

我有一个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]);
}

但是在数组的第一个删除位置被更改后,在下一次迭代中它会删除错误的元素或给出异常。

4

11 回答 11

141

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

for (int j = i.length-1; j >= 0; j--) {
    list.remove(i[j]);
}
于 2012-05-23T05:58:12.717 回答
30

ArrayList您可以从using中删除元素ListIterator

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
于 2012-05-23T06:06:40.217 回答
10
 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);

    }
}
于 2013-01-24T11:58:02.240 回答
7

正如先前所说

iterator.remove()

可能是在循环期间删除列表项的唯一安全方法。

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

于 2015-02-24T08:59:23.387 回答
4

我假设数组 i 是升序排序的,这是使用 Iterator 的另一种解决方案,它更通用:

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++;
}
于 2016-08-29T14:55:32.680 回答
3
String[] mString = new String[] {"B", "D", "F"};

for (int j = 0; j < mString.length-1; j++) {
        List_Of_Array.remove(mString[j]);
}
于 2012-05-23T06:01:14.620 回答
2

这个怎么样?想一想——

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]
于 2012-05-23T06:03:48.923 回答
2

试试这个方法

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]);
}
于 2012-05-23T06:07:06.573 回答
2

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

        List_Of_Array1.addAll(List_Of_Array);
于 2013-11-19T05:32:30.857 回答
2

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

表示数组列表是否包含 {20,15,30,40}

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

那么数据 15 将被删除,而 30 和 40 这两项将左移 1。

出于这个原因,您必须首先删除 arraylist 的更高索引项。

所以..对于您给定的情况..代码将是..

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]);
}
于 2016-03-06T14:28:17.863 回答
-1

如果您需要删除列表中的最终项目可以使用此代码

 if(yourList.size() != 0){
   yourList.remove(yourList.size()-1);
 }

或者您可能需要在选择列表中的项目后删除一段时间

if(selected){// boolean for checked add or remove
   yourList.add(position , id); // add to list by position can use your list position
}else{
   if(yourList.size() != 0){ 
   yourList.remove(position);
 }
}
于 2021-04-24T07:55:15.333 回答