如何从Java中的ArrayList中删除对象?
我有一个包含某些对象的ArrayList
,例如User
,每个对象都有一个name
和password
属性。 如何仅从此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); } } }