天天看點

「Java」求并集、交集、差集、交補集、笛卡爾集的幾種方法并 集交 集差 集交補集笛卡爾積

相信朋友們在程式開發過程中,或多或少的,都會用到集合相關的運算,如:求集合的并集、交集、差集等。今天我們就給大家介紹下java中常用的幾種求并集、交集、差集、交補集、笛卡爾集的方法。

文章中介紹的幾種集合運算,主要是依賴jdk裡的相關方法,以及apache的commons-collections4庫和google的guava庫中的相關方法。apache和google的庫依賴如下:

「Java」求并集、交集、差集、交補集、笛卡爾集的幾種方法并 集交 集差 集交補集笛卡爾積

并集是求兩個集合裡的所有元素的總和,如:集合1為:[1, 2],集合2為:[3, 4],求并集後的結果為:[1, 2, 3, 4]。求并集的常用方法如下:

「Java」求并集、交集、差集、交補集、笛卡爾集的幾種方法并 集交 集差 集交補集笛卡爾積

交集是求兩個集合中共有的元素,如:集合1為:[1, 2],集合2為:[1, 3],求交集後的結果為:[1],求交集的常用方法如下:

「Java」求并集、交集、差集、交補集、笛卡爾集的幾種方法并 集交 集差 集交補集笛卡爾積

差集是求一個集合中排除掉另一個集合中的元素後剩下的元素(注意:集合1差集合2和集合2差集合1的結果可能是不一樣的),如:集合1為:[1, 2],集合2為:[1, 3],集合1差集合2的結果為:[2],集合2差集合1的結果為:[3]。求差集的常用方法如下:

「Java」求并集、交集、差集、交補集、笛卡爾集的幾種方法并 集交 集差 集交補集笛卡爾積

交補集是求兩個集合互為不一樣的元素,可以了解為求兩個集合之間并集和交集的補集。如:集合1為:[1, 2],集合2為:[1, 3],求交補集的結果為:[2, 3] 。求交補集的常用方法如下:

「Java」求并集、交集、差集、交補集、笛卡爾集的幾種方法并 集交 集差 集交補集笛卡爾積

笛卡爾積是求集合之間每個元素一一組合而成的集合,如:集合1為:[1, 2],集合2為:[1, 3],求笛卡爾集的結果為:[[1, 1], [1, 3], [2, 1], [2, 3]] 。求笛卡爾集的常用方法如下:

「Java」求并集、交集、差集、交補集、笛卡爾集的幾種方法并 集交 集差 集交補集笛卡爾積

以上羅列的各種方法,都能滿足計算的要求,具體的不同在于:有的方法是直接把計算結果更新到入參對象裡,傳回值為表示入參對象是否有變更的一個布爾值;有的方法是不修改入參對象,而是把計算結果作為新對象傳回。選擇使用哪個方法,主要是看代碼上下文的情況以及自己的一些編碼風格。

最後,需要提一下的是,本文所舉例子的集合裡存放的對象都是integer,但是在具體的代碼裡集合裡存放的可能是其他自定義類的對象,那就需要大家注意自定義類需要覆寫hashcode()和equals()方法,因為很多集合運算都是依賴這兩個方法的傳回值的,如果不正确覆寫,可能會導緻計算結果的錯誤。

------ the end ------

繼續閱讀