淺談list.removeAll()刪除失敗的原因及解決
阿新 • • 發佈:2020-12-03
未重寫hashCode() 和 equals() 方法 ! 在實體類中重寫這兩個方法即可
ATTENTION:若實體類中還有實體類的屬性,則該實體類也要重寫這兩個方法
(實際開發中存在刪除失敗的問題,待研究。暫採用Map刪除方式)
實體類:
public class User { private String name; private int age; private String sex; //private Company company; // Company 類也要重寫 hashCode() 和 equals() 方法 //省略getter setter方法 public User(String name,int age,String sex) { super(); this.name = name; this.age = age; this.sex = sex; } public User() { super(); } @Override public String toString() { return "User [name=" + name + ",age=" + age + ",sex=" + sex + "]"; } }
測試類:
import java.util.ArrayList; import java.util.List; public class TestRemoveAll { public static void main(String[] args) { // List<User> allList = new ArrayList<User>(); allList.add(new User("張三",18,"男")); allList.add(new User("李四",20,"女")); // List<User> list = new ArrayList<User>(); list.add(new User("張三","男")); // 測試 if(allList.removeAll(list)){ System.out.println("刪除成功!"); System.out.println(allList); }else{ System.out.println("刪除失敗!"); System.out.println(allList); } } }
列印結果:
刪除失敗!
[User [name=張三,age=18,sex=男],User [name=李四,age=20,sex=女]]
刪除失敗原因:
未重寫hashCode() 和 equals() 方法 ! 在User類中重寫這兩個方法即可
則列印結果:
刪除成功!
[User [name=李四,sex=女]]
======================================================= 於此相似的問題:
list.contains()方法判斷是否包含自定義物件,實體類也要重寫這兩個方法
import java.util.ArrayList; import java.util.List; public class TestRemoveAll { public static void main(String[] args) { // List<User> allList = new ArrayList<User>(); allList.add(new User("張三","女")); // User user = new User("張三","男"); // 測試 if(allList.contains(user)){ System.out.println("我重寫了hashCode() equals() 方法,所以列印此條!"); }else{ System.out.println("若未重寫hashCode() equals() 方法,則列印此條!"); } } }
則列印結果:
我重寫了hashCode() equals() 方法,所以列印此條!
補充知識:list.removeAll()方法異常
list的removeAll方法,可以從集合中移除集合,得到對應的補集。
但是,兩種情況下會遇到異常
1.在遍歷集合時執行移除操作。
2.集合是隻讀的,不支援remove方法。
例如。Arrays.asList(new Array({})產生的集合。
但是可以採用如下方法結局異常:
new ArrayList().addAll();
以上這篇淺談list.removeAll()刪除失敗的原因及解決就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。