一、背景介紹
在Java中,List是一種經常使用的集合類型,它提供了一系列常用的操作方法。其中retainAll方法可以用來求兩個集合(可以是List、Set、Collection等)的交集。
retainAll方法的定義為:
boolean retainAll(Collection c);
其中c表示要求交集的集合,方法返回一個boolean值,表示是否修改了當前集合(即是否有元素被刪除了)。
二、retainAll方法的使用
下面我們以兩個List集合為例,來介紹retainAll方法的使用方法。
1. 求兩個List集合的交集
首先,我們需要創建兩個List集合,分別為list1和list2。它們的元素類型可以是任意類型,比如String、Integer等。
List<String> list1 = new ArrayList<>();
list1.add("apple");
list1.add("banana");
list1.add("cherry");
list1.add("date");
List<String> list2 = new ArrayList<>();
list2.add("banana");
list2.add("date");
list2.add("elderberry");
list2.add("fig");
現在,我們想要求list1和list2的交集,可以使用retainAll方法,代碼如下:
boolean isModified = list1.retainAll(list2);
執行完上面的代碼後,list1中的元素將只剩下”banana”和”date”,而isModified的值為true,表示list1被修改了,即有元素被刪除了。
2.使用retainAll方法去重
除了求交集之外,retainAll方法還可以用來去重。我們可以將一個List集合看做一個集合,然後將另一個List集合作為候選元素集合,使用retainAll方法求出它們的交集,再將交集添加到原List集合中,從而實現去重。
示例代碼如下:
List<String> list1 = new ArrayList<>();
list1.add("apple");
list1.add("banana");
list1.add("cherry");
List<String> list2 = new ArrayList<>();
list2.add("banana");
list2.add("cherry");
list2.add("date");
boolean isModified = list1.retainAll(list2);
if (isModified) {
list1.addAll(list2);
}
System.out.println(list1);
執行完上面的代碼後,list1中的元素將為”apple”、”banana”、”cherry”和”date”,即去掉了重複的元素”banana”和”cherry”。
3. 針對自定義類型的使用方法
retainAll方法不僅可以用來處理字符串、整數等基本類型的List集合,還可以處理自定義類型的List集合。我們只需要在自定義類型中實現equals方法,即可確保retainAll方法可以正確比較元素的相等性。
示例代碼如下:
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (this == obj) {
return true;
}
if (obj instanceof Person) {
Person person = (Person) obj;
return Objects.equals(this.name, person.name) && this.age == person.age;
}
return false;
}
}
public class Main {
public static void main(String[] args) {
List<Person> list1 = new ArrayList<>();
list1.add(new Person("Alice", 18));
list1.add(new Person("Bob", 20));
list1.add(new Person("Charlie", 22));
List<Person> list2 = new ArrayList<>();
list2.add(new Person("Bob", 20));
list2.add(new Person("Charlie", 22));
list2.add(new Person("David", 24));
boolean isModified = list1.retainAll(list2);
if (isModified) {
list1.addAll(list2);
}
list1.forEach(person -> System.out.println(person.getName() + " " + person.getAge()));
}
}
執行完上面的代碼後,輸出結果為:
Bob 20 Charlie 22 David 24
可以看到,我們成功地對自定義類型的List集合求了交集,它們的equals方法正確比較了兩個元素的相等性。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/250944.html