从ArrayList中删除Item

Kri*_*lal 98 java arraylist

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

我正试图这样做

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]);
}
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*ood 132

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

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

  • 好的,听着......我不知道重要的是什么.OP发布了他的代码,我回答了一个解释,说明了可能的解决方案.对不起,我没有提供一个完全通用的解决方案......但据我所知,OP并没有要求编程课程.他在问"为什么这段代码不起作用?" 不要因为你以不同的方式解释问题而开始责怪我对你的回答进行投票. (65认同)
  • 是的,我同意你的看法.但是OP询问了'ArrayList <String>`,而不是'ArrayList <E>`. (3认同)

Jai*_*dra 30

您可以删除ArrayList使用中的元素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
Run Code Online (Sandbox Code Playgroud)


小智 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);

    }
}
Run Code Online (Sandbox Code Playgroud)


小智 7

正如先前所说

iterator.remove()
Run Code Online (Sandbox Code Playgroud)

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

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