我有一个ArrayList
,其中包含一些对象,例如User
,每个对象都有一个name
和password
属性。如何从这个ArrayList
中仅删除具有特定“名称”的User
对象?
Iterator<User> it = list.iterator();
while (it.hasNext()) {
User user = it.next();
if (user.getName().equals("John Doe")) {
it.remove();
}
}
// 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);
s
是什么?请尽量具体地回答。 - james.garrissUser
类可以通过用户名唯一定义,而且您使用类似以下内容覆盖equals
方法:public boolean equals(Object arg0) {
return this.name.equals(((user) arg0).name);
}
您可以不通过对列表进行迭代来删除User
。只需执行以下操作:
list.remove(new User("John Doe"))
List<User> list = new ...
for (Iterator<User> it = list.iterator(); it.hasNext(); ) {
User user = it.next();
if (user.getUserEmail().equals(currentUser.getUserEmail())) {
it.remove();
}
}
推荐解决此问题的方法是:
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();
}
}
ArrayList(Object)
更高效,因为它更快速并且节省20%的时间,这是Java集合的标准做法。您可以:
O(n)
更好的性能? - Hunter McMillenO(n)
就是他所能期望的最好结果(仅元素删除本身就是O(n)
)。 - NPE你的代码可能长这样:
List<User> users = new ArrayList<User>();
public void removeUser(String name){
for(User user:users){
if(user.name.equals(name)){
users.remove(user);
}
}
}
List<String> list = new ArrayList<String>(); list.add("a"); for (String s : list) { list.remove(s); }
,你应该会得到一个异常。 - assyliasArrayList<User> userList=new ArrayList<>();
//load data
public void removeUser(String userName){
for (User user: userList){
if(user.getName()equals(userName)){
userList.remove(user);
}
}
}