Java基础-集合类-ArrayList retainAll() 方法
一、 retainAll 方法
retainAll() 方法用于保留 arraylist 中在指定集合中也存在的那些元素,也就是刪除指定集合中不存在的那些元素。
retainAll() 方法的語法為:
arraylist.retainAll(Collection c);
源碼為:
public boolean retainAll(Collection<?> c) {//調用自己的私有方法return batchRemove(c, true);}參數說明:
- collection - 集合參數
返回值 如果 arraylist 中刪除了元素則返回 true。
如果 arraylist 類中存在的元素與指定 collection 的類中元素不兼容,則拋出 ClassCastException 異常。
如果 arraylist 包含 null 元素,并且指定 collection 不允許 null 元素,則拋出 NullPointerException 。
二、batchRemove 方法解析
如果此 collection 由于調用而發生更改,則返回 true
//集合A比較與集合B的交集private boolean batchRemove(Collection<?> c, boolean complement) {//獲得當前對象的所有元素final Object[] elementData = this.elementData;//w:標記兩個集合公共元素的個數int r = 0, w = 0;//設置標志位boolean modified = false;try {//遍歷集合Afor (; r < size; r++)//判斷集合B中是否包含集合A中的當前元素if (c.contains(elementData[r]) == complement)//如果包含則直接保存。elementData[w++] = elementData[r];} finally {// 如果 c.contains() 拋出異常if (r != size) {//復制剩余的元素System.arraycopy(elementData, r,elementData, w,size - r);//w為當前集合A的lengthw += size - r;}//如果集合A的大小放生改變if (w != size) {// 清除工作for (int i = w; i < size; i++)elementData[i] = null;//記錄集合中元素的改變(add/remove)modCount += size - w;//設置當前數組的大小size = w;//返回為truemodified = true;}}return modified;}1、關于modCount變量的說明
 AbstractList包含一個modCount變量,它的初始值是0,當集合中的內容每被修改一次時(調用add(), remove()等方法),modCount加1
2、關于返回值的說明
 如果集合A數組的大小沒有改變,則返回false。如果集合A和集合B是完全相同的集合,也會返回false。
即使兩個集合沒有交集,也會返回true。
public static void main(String[] args) {ArrayList<String> listA= new ArrayList<String>();listA.add("Tom");ArrayList<String> listB= new ArrayList<String>();listB.add("Jack");System.out.println(listA.retainAll(listB));//true}所以,我們要記住:當集合A的大小改變的時候返回的是True,大小沒有改變的時候返回的是False。
三、正確的使用 retainAll 方法
1、sites.retainAll(sites2)意義上為:sites 刪除了不存在于 sites2 的元素
 2、通過判斷集合的大小,來確定是否存在交集
執行以上程序輸出結果為:
ArrayList 1: [Google, Runoob, Taobao] ArrayList 2: [Wiki, Runoob, Google] 保留的元素: [Google, Runoob]實例中,我們傳入了數組 sites2 作為 retainAll() 方法的參數。該方法從 sites 刪除了不存在于 sites2 的元素。
import java.util.ArrayList; import java.util.HashSet;class Main {public static void main(String[] args) {// 創建一個數組ArrayList<Integer> numbers = new ArrayList<>();// 往數組中添加元素numbers.add(1);numbers.add(2);numbers.add(3);System.out.println("ArrayList: " + numbers);// 創建一個HashSet對象HashSet<Integer> primeNumbers = new HashSet<>();// 往 HashSet添加元素primeNumbers.add(2);primeNumbers.add(3);primeNumbers.add(5);System.out.println("HashSet: " + primeNumbers);// 在arraylist中保留公共的元素numbers.retainAll(primeNumbers);System.out.println("共有元素: " + numbers);} }執行以上程序輸出結果為:
ArrayList: [1, 2, 3] HashSet: [2, 3, 5] 共有元素: [2, 3]代碼中,retainAll() 方法在 numbers 動態數組中刪除了所有不存在于 primeNumbers 中的元素。
總結
以上是生活随笔為你收集整理的Java基础-集合类-ArrayList retainAll() 方法的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 人工智能自然语言处理NLP入门教程
- 下一篇: ./configure make m
