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

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

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

你可以使用这样的东西:

  arrayList.removeIf(s-> s.getName().contains("yourName")); 

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

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

 List list = new ... for (Iterator it = list.iterator(); it.hasNext(); ) { User user = it.next(); if (user.getUserEmail().equals(currentUser.getUserEmail())) { it.remove(); } } 

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

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

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

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

你可以:

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

解决这个问题的推荐方法是:

 ArrayList list = new ArrayList(); 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 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实践。

只需搜索从用户获得的对象的ArrayList,并测试一个等于要删除的名称的名称。 然后从列表中删除该对象。

您的代码可能如下所示:

 List users = new ArrayList(); public void removeUser(String name){ for(User user:users){ if(user.name.equals(name)){ users.remove(user); } } } 
 ArrayList userList=new ArrayList<>(); //load data public void removeUser(String userName){ for (User user: userList){ if(user.getName()equals(userName)){ userList.remove(user); } } }