我有一个ArrayList
包含一些对象的对象,例如User
,并且每个对象都有一个name
andpassword
属性。如何从中仅删除User
具有特定“名称”的对象ArrayList
?
问问题
52993 次
9 回答
24
Iterator<User> it = list.iterator();
while (it.hasNext()) {
User user = it.next();
if (user.getName().equals("John Doe")) {
it.remove();
}
}
于 2012-05-08T16:03:43.153 回答
7
另一个想法:如果User
类可以由用户名唯一定义,并且如果您使用以下内容覆盖equals
:
public boolean equals(Object arg0) {
return this.name.equals(((user) arg0).name);
}
您可以在User
不遍历列表的情况下删除 。你可以这样做:
list.remove(new User("John Doe"))
于 2012-05-08T16:33:21.263 回答
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);
于 2016-01-07T11:43:33.627 回答
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();
}
}
于 2014-06-05T07:35:00.380 回答
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();
}
}
使用 Iterator 删除对象比仅通过键入删除对象更有效,ArrayList(Object)
因为它更快,节省 20% 的时间,并且是 Java 集合的标准 Java 实践。
于 2016-05-19T11:07:30.053 回答
3
你可以:
- 使用迭代器循环列表
- 检查列表中的每个项目是否都是正确的用户(检查名称)
- 如果是,请使用迭代器的 remove 方法。
于 2012-05-08T16:03:07.497 回答
1
只需搜索您从用户那里获得的对象的 ArrayList,并测试与您要删除的名称相同的名称。然后从列表中删除该对象。
于 2012-05-08T16:02:53.027 回答
0
你的代码可能是这样的:</p>
List<User> users = new ArrayList<User>();
public void removeUser(String name){
for(User user:users){
if(user.name.equals(name)){
users.remove(user);
}
}
}
于 2012-05-08T16:06:23.687 回答
-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);
}
}
}
于 2016-12-29T05:36:04.443 回答