1. 程式人生 > 程式設計 >淺談list.removeAll()刪除失敗的原因及解決

淺談list.removeAll()刪除失敗的原因及解決

未重寫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類中重寫這兩個方法即可

淺談list.removeAll()刪除失敗的原因及解決

則列印結果:

刪除成功!

[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()刪除失敗的原因及解決就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。