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

时间:2012-05-08 16:00:23

标签: java arraylist

我有ArrayList包含一些对象,例如User,每个对象都有namepassword属性。如何从此User中仅删除具有特定“名称”的ArrayList对象?

9 个答案:

答案 0 :(得分:22)

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

答案 1 :(得分:7)

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

public boolean equals(Object arg0) {
    return this.name.equals(((user) arg0).name);
}

您可以删除User而无需遍历列表。你可以这样做:

 list.remove(new User("John Doe"))

答案 2 :(得分: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);

答案 3 :(得分: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();
    }
}

答案 4 :(得分:4)

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

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();
    }
}

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

答案 5 :(得分:3)

你可以:

  • 使用迭代器
  • 遍历列表
  • 检查列表中的每个项目是否是正确的用户(检查名称)
  • 如果是,请使用迭代器的remove方法。

答案 6 :(得分:1)

只需搜索从用户处获取的对象的ArrayList,并测试与要删除的名称相等的名称。然后从列表中删除该对象。

答案 7 :(得分:0)

您的代码可能如下所示:

List<User> users = new ArrayList<User>();

public void removeUser(String name){
    for(User user:users){
        if(user.name.equals(name)){
            users.remove(user);
        }
    }
}

答案 8 :(得分:-1)

ArrayList<User> userList=new ArrayList<>();
//load data

public void removeUser(String userName){
    for (User user: userList){
        if(user.getName()equals(userName)){
            userList.remove(user);
        }
    }
}