介紹
Java中有着許多的Collection接口,而其中有一個非常常用的方法就是retainAll()方法。這個方法可以幫助開發人員在兩個集合中找到相同的元素,讓我們來看看這個方法到底是如何使用的吧。
正文
一、retainAll()方法概述
retainAll()方法是集合中的一個方法,返回值是boolean類型,用來計算並返回調用該方法所屬對象和指定參數對象的交集是否成功,也就是說,返回的是操作是否成功。如果成功,則調用該方法的對象會保存交集,否則,它將保留原始狀態。
二、使用retainAll()方法
使用retainAll()方法非常簡單,只需要使用集合對象調用retainAll()方法並將另一個集合對象作為參數傳入即可。以下就是一個簡單的代碼示例:
List list1 = new ArrayList(); list1.add("A"); list1.add("B"); list1.add("C"); List list2 = new ArrayList(); list2.add("B"); list2.add("C"); list2.add("D"); System.out.println("list1:"+list1); System.out.println("list2:"+list2); list1.retainAll(list2); System.out.println("list1:"+list1);
上面這段代碼中,我們定義了兩個List集合對象,其中一個里包含了A、B、C三個元素,另一個含有B、C、D三個元素。我們將兩個List集合對象傳入retainAll()方法,然後輸出結果,如下所示:
list1:[A, B, C] list2:[B, C, D] list1:[B, C]
可以看到,retainAll()方法返回了true,並且集合list1隻包含了B和C。
三、retainAll()方法和equals()的關係
retainAll()方法在執行時候並不會調用equals()方法,它只是通過hashCode()方法和==來判斷元素是否相等,所以使用retainAll()方法時需要注意這一點。如果你想通過equals()來判斷元素是否相等,可以考慮使用Java 8 的Stream API來實現,代碼示例如下:
list1.stream().filter(list2::contains).collect(Collectors.toList());
上面這段代碼用到了Stream API的filter()方法和collect()方法。首先調用了list1集合的stream()方法,然後通過filter()方法,篩選出包含在list2中的元素,最後使用collect()方法將篩選出來的元素收集到一個List集合對象中。
四、與removeAll()方法的區別
與removeAll()方法類似,retainAll()方法也可以用來取交集,但是它與removeAll()方法還是有些不同的。其主要區別在於:retainAll()方法會改變集合本身,而removeAll()方法不會改變集合本身。因此,retainAll()方法相對要危險一些,如果不小心使用,就可能會改變原本不應該被改變的集合對象。所以在使用這個方法時一定要小心。
結論
Java中retainAll()方法是一個很有用的方法,它可以獲取兩個集合中的交集。不過在使用時需要注意它與equals()方法的區別,以及使用它可能會對集合本身進行更改的特性。
原創文章,作者:YRHR,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/141003.html