1700444972
1700444973
list2.add(“C”);
1700444974
1700444975
list2.add(“B”);
1700444976
1700444977
//并集
1700444978
1700444979
list1.addAll(list2);
1700444980
1700444981
}
1700444982
1700444983
此时,list1中就是两个列表的并集元素了。
1700444984
1700444985
(2)交集
1700444986
1700444987
计算两个集合的共有元素,也就是你有我也有的元素集合,代码如下:
1700444988
1700444989
list1.retainAll(list2);
1700444990
1700444991
其中的变量list1和list2是两个列表,仅此一句话,list1中就只包含list1、list2中共有的元素了。注意retainAll方法会删除list1中没有出现在list2中的元素。
1700444992
1700444993
(3)差集
1700444994
1700444995
由所有属于A但不属于B的元素组成的集合,叫做A与B的差集,也就是我有你没有的元素,代码如下:
1700444996
1700444997
list1.removeAll(list2);
1700444998
1700444999
也很简单,从list1中删除出现在lis2的元素,即可得出list1与list2的差集部分。
1700445000
1700445001
(4)无重复的并集
1700445002
1700445003
什么叫无重复的并集?并集是集合A加集合B,那如果集合A和集合B有交集(也就是并集的元素数量大于0),就需要确保并集的结果中只有一份交集,此为无重复的并集。此操作也比较简单,代码如下:
1700445004
1700445005
//删除在list1中出现的元素
1700445006
1700445007
list2.removeAll(list1);
1700445008
1700445009
//把剩余的list2元素加到list1中
1700445010
1700445011
list1.addAll(list2);
1700445012
1700445013
有读者可能说了,求出两个集合的并集,然后转变成HashSet剔除重复元素不就解决问题了吗?错了,这样解决是不行的,比如集合A有10个元素(其中有两个元素值是相同的),集合B有8个元素,它们的交集有2个元素,我们可以计算出它们的并集是18个元素,而无重复的并集有16个元素,但是如果使用HashSet算法,算出来则只有15个元素,因为你把集合A中原本就重复的元素也剔除掉了。
1700445014
1700445015
读者可能会很困惑,为什么要介绍并集、交集、差集呢?那是因为只要去检查一下代码,就会发现,很少有程序员使用JDK提供的方法来实现这些集合操作,基本上都是采用的标准的嵌套for循环:要并集就是加法,要交集了就使用contains判断是否存在,要差集了就使用!contains(不包含),有时候还要为这类操作提供一个单独方法,看似很规范,但已经脱离了优雅的味道。
1700445016
1700445017
集合的这些操作在持久层中使用得非常频繁,从数据库中取出的就是多个数据集合,之后我们就可以使用集合的各种方法构建我们需要的数据了,需要两个集合的and结果,那是交集,需要两个集合的or结果,那是并集,需要两个集合的not结果,那是差集。
1700445018
1700445019
1700445020
1700445021
[
上一页 ]
[ :1.700444972e+09 ]
[
下一页 ]