如何从Java中的ArrayList中删除对象?

Moh*_*mal 7 java arraylist

我有一个ArrayList包含一些对象,例如User,每个对象都有一个namepassword属性.如何仅删除User具有特定"名称" 的对象ArrayList

NPE*_*NPE 22

Iterator<User> it = list.iterator();
while (it.hasNext()) {
  User user = it.next();
  if (user.getName().equals("John Doe")) {
    it.remove();
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 看起来不像OP为这个问题做了任何工作,你不应该免费给他们代码. (9认同)
  • @ user1117931你应该[接受答案](http://meta.stackexchange.com/a/5235/179508),如果它可以帮助你解决问题. (7认同)

har*_*ree 7

另一个想法:如果User类可以由用户名唯一定义,并且如果您使用以下内容覆盖equals:

public boolean equals(Object arg0) {
    return this.name.equals(((user) arg0).name);
}
Run Code Online (Sandbox Code Playgroud)

您可以删除User而不迭代列表.你可以这样做:

 list.remove(new User("John Doe"))
Run Code Online (Sandbox Code Playgroud)


man*_*tam 7

你可以使用这样的东西:

           // If you are using java 8
           userList.removeIf(user-> user.getName().equals("yourUserName"));
           // With older version
           User userToRemove = null;
           for(User usr:userList) {
             if(usr.getName().equals("yourUserName")) {
                userToRemove = usr;
                break;
             }
           }
           userList.remove(userToRemove);
Run Code Online (Sandbox Code Playgroud)


mik*_*iii 6

您可能ConcurrentModificationException正在尝试从中移除对象List.对此异常的解释是,迭代器ArrayList是一个快速失败的迭代器.例如,当它检测到运行时中的集合已被修改时,它将抛出异常(失败).解决这个问题的方法是使用Iterator.

这是一个简单的示例,演示了如何List在满足特定条件时迭代并删除元素:

List<User> list = new ...

for (Iterator<User> it = list.iterator(); it.hasNext(); ) {

    User user = it.next();
    if (user.getUserEmail().equals(currentUser.getUserEmail())) {
       it.remove();
    }
}
Run Code Online (Sandbox Code Playgroud)


Rah*_*ina 5

解决此问题的推荐方法是:

ArrayList<User> list = new ArrayList<User>();
list.add(new User("user1","password1"));
list.add(new User("user2","password2"));
list.add(new User("user3","password3"));
list.add(new User("user4","password4"));
Iterator<String> iter = list.iterator();
while (iter.hasNext()) 
{
    User user = iter.next();
    if(user.name.equals("user1"))
    {
        //Use iterator to remove this User object.
        iter.remove();
    }
}
Run Code Online (Sandbox Code Playgroud)

使用 Iterator 删除对象比通过简单键入删除更有效,ArrayList(Object) 因为它更快,节省 20% 的时间,并且是 Java 集合的标准 Java 实践。