![](/img/trans.png)
[英]How do I remove objects from an arraylist which are present in another arraylist based on one member variable of the object in Java?
[英]How do I remove an object from an ArrayList in Java?
我有一個包含一些對象的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();
}
}
另一個想法:如果User
類可以由用戶名唯一定義,並且如果您用類似以下內容覆蓋equals
:
public boolean equals(Object arg0) {
return this.name.equals(((user) arg0).name);
}
您可以刪除User
而無需遍歷列表。 您可以這樣做:
list.remove(new User("John Doe"))
您可以使用如下形式:
// 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);
嘗試從List
刪除對象時,您可能會遇到ConcurrentModificationException
。 對此異常的解釋是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();
}
}
解決此問題的推薦方法是:
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做法。
你可以:
只需搜索從用戶那里獲得的對象的ArrayList,然后測試名稱是否等於要刪除的名稱。 然后從列表中刪除該對象。
您的代碼可能如下所示:
List<User> users = new ArrayList<User>();
public void removeUser(String name){
for(User user:users){
if(user.name.equals(name)){
users.remove(user);
}
}
}
ArrayList<User> userList=new ArrayList<>();
//load data
public void removeUser(String userName){
for (User user: userList){
if(user.getName()equals(userName)){
userList.remove(user);
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.