簡體   English   中英

如何從Java中的ArrayList中刪除對象?

[英]How do I remove an object from an ArrayList in Java?

我有一個包含一些對象的ArrayList ,例如User ,每個對象都有一個namepassword屬性。 如何從此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做法。

你可以:

  • 用迭代器遍歷列表
  • 檢查列表中的每個項目是否都是正確的用戶(檢查名稱)
  • 如果是,請使用迭代器的remove方法。

只需搜索從用戶那里獲得的對象的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM