日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java基础-集合类-ArrayList retainAll() 方法

發布時間:2023/12/29 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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。

public static void main(String[] args) {ArrayList<String> listA= new ArrayList<String>();listA.add("Tom");ArrayList<String> listB= new ArrayList<String>();listB.add("Tom");System.out.println(listA.retainAll(listB)); //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、通過判斷集合的大小,來確定是否存在交集

import java.util.ArrayList; class Main {public static void main(String[] args){// 創建一個動態數組ArrayList<String> sites = new ArrayList<>();sites.add("Google");sites.add("Runoob");sites.add("Taobao");System.out.println("ArrayList 1: " + sites);// 創建另一個動態數組ArrayList<String> sites2 = new ArrayList<>();// 往動態數組中添加元素sites2.add("Wiki");sites2.add("Runoob");sites2.add("Google");System.out.println("ArrayList 2: " + sites2);// 保留元素sites.retainAll(sites2);System.out.println("保留的元素: " + sites);} }

執行以上程序輸出結果為:

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() 方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。