一、本文介绍两种写法
1原生写法
写法
<dependency>
<groupId></groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
</dependency>
二、代码
import ;
import ;
import ;
/**
* java求集合的交集、差集和并集
*/
public class CollectionOperation {
public static void main(String[] args) {
Set<Integer> result = new HashSet<Integer>();
//双括号语法 -> 本质是: 匿名内部类 + 实例化代码块
//改写之后的代码就非常容易理解了。显然这是在HashSet的构造器中写了一个匿名内部类,这个匿名内部类含有一个实例初始化块
//初始化块的内容是三个add()函数,向被初始化的this指向的HashSet中添加了三个元素。
Set<Integer> set1 = new HashSet<Integer>() {
private static final long serialVersionUID = 1L;
{
add(1);
add(3);
add(5);
}
};
Set<Integer> set2 = new HashSet<Integer>() {
private static final long serialVersionUID = 1L;
{
add(1);
add(2);
add(3);
}
};
("set1 " + set1);
("set2 " + set2);
//原生写法
("原生写法 ===================");
test1(result, set1, set2);
//写法
("写法 ===================");
test2(result, set1, set2);
}
public static void test1(Set<Integer> result, Set<Integer> set1, Set<Integer> set2) {
//交集
();
(set1);
(set2);
("交集:" + result);
//差集
();
(set1);
(set2);
("差集:" + result);
//并集
();
(set1);
(set2);
("并集:" + result);
}
public static void test2(Set<Integer> result, Set<Integer> set1, Set<Integer> set2) {
//交集
<Integer> intersection = (set1, set2);
("交集:" + ()); // 可以使用交集,但不可变拷贝的读取效率更高
//差集
<Integer> difference = (set1, set2);
("差集:" + ());
//并集
<Integer> union = (set1, set2);
("并集:" + ());
}
}
三、输出
set1 [1, 3, 5]
set2 [1, 2, 3]
原生写法 ===================
交集:[1, 3]
差集:[5]
并集:[1, 2, 3, 5]
写法 ===================
交集:[1, 3]
差集:[5]
并集:[1, 3, 5, 2]