一、retainAll方法的定義
java.util.List.retainAll(Collection c)方法是用於取兩個集合的交集,即保留列表中在指定集合中出現的所有元素。該方法返回一個布爾類型值,表示是否修改了調用它的列表。若果返回值為真,則意味著調用對象列表發生了修改。
二、retainAll方法與removeAll方法的區別
列表對象本身將被更改,則在retainAll和removeAll方法之間有一個重要的區別。retainAll方法保留原始集合與指定集合之間的交集,而removeAll方法刪除兩個集合之間的差異。
例如,假設有兩個列表List1和List2,且List1包含 1, 2, 3, 4, 5, 6,而List2包含4,5,6,7,8,9。使用retainAll方法,可從List1中選擇集合List2中存在的元素。 運行結果為List1=[4,5,6]。
List List1 = new ArrayList (); List1.add (1); List1.add (2); List1.add (3); List1.add (4); List1.add (5); List1.add (6); List List2 = new ArrayList (); List2.add (4); List2.add (5); List2.add (6); List2.add (7); List2.add (8); List2.add (9); List1.retainAll (List2); System.out.println ("List1 = " + List1); // List1=[4,5,6]
而如果使用removeAll方法,則從List1中刪除List2存在的元素。運行結果為List1=[1,2,3]。
List1.removeAll (List2); System.out.println ("List1 = " + List1); // List1=[1,2,3]
三、retainAll方法的使用場景
1.取兩個集合的交集
retainAll方法最常見的用法是取兩個集合的交集。例如,現在需要找出兩個集合中共有的元素。可以使用retainAll方法,一行語句搞定。
List list1 = Arrays.asList ("1","2","3","4"); List list2 = Arrays.asList ("3","4","5","6"); list1.retainAll (list2); System.out.println(list1); // 3,4
2.數據分析
retainAll方法也可以用於數據分析。例如,現在需要對兩份數據進行比較,並找出其中共有的元素。可以將其中的一份數據存儲在列表對象中,然後調用retainAll方法來篩選共有的元素。
// 構造兩份數據 List data1 = Arrays.asList ("apple","orange","banana","pear"); List data2 = Arrays.asList ("banana","pear","watermelon","mango"); List result = new ArrayList (); result.addAll (data1); // 使用retainAll方法 result.retainAll (data2); System.out.println (result); // banana,pear
3.列表對象的規約處理
retainAll方法也適用於列表對象的規約處理。例如,現在需要將兩個列表對象合併,但是其中有一些元素卻相同。可以使用retainAll方法來消去重複元素。
List list1 = Arrays.asList ("apple","orange","banana","pear"); List list2 = Arrays.asList ("pineapple","pear","banana","kiwi"); // 類型轉換 List result = new ArrayList(list1); result.addAll (list2); // 使用retainAll方法去重 result.retainAll (list1); System.out.println (result); // pear,banana
四、retainAll方法的注意事項
1.原始集合將被修改
在應用retainAll方法時,必須確保理解其含義,因為它將修改原始集合。因此,要先備份原始集合,以免在處理時丟失數據。
2.集合的「交」和「並」有很大區別
集合的「交」是指在兩個集合中都存在的元素,而集合的「並」是指兩個集合中的所有元素。如果使用retainAll方法,該方法將返回兩個集合的交集。
3.調用retainAll方法可以直接修改調用者對象
retainAll方法將直接修改調用列表對象並返回一個布爾值。當返回true時,調用對象的值已被更改,當返回false時,調用對象的值沒有被更改。
4.適用於類型相同的集合
retainAll方法只能在相同類型的集合之間進行操作,否則將會拋出ClassCastException異常。
五、總結
retainAll方法是對兩個集合進行比較,取出它們之間的公共元素的一種便捷的方法,通常用於集合運算和數據分析。在使用retainAll方法時,必須注意它將修改原始集合。使用該方法可以優化代碼體積,提高代碼可讀性,並減少演算法的耗時。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/286203.html