Java中交集并集差集补集去重的实现
目录
Java中交集、并集、差集、补集、去重的实现
一、交集
1. 交集的实现
//交集
@Test
public void intersection(){
//向集合中添加元素
ArrayList<String> datas = new ArrayList<>();
Collections.addAll(datas, "张三", "李四", "王五", "赵六");
//向集合中添加元素
ArrayList<String> arrs = new ArrayList<>();
Collections.addAll(arrs, "田七", "赵六", "张三", "阿飞");
// 求交集
datas.retainAll(arrs);
for (String str : datas) {
System.out.println(str);
}
}
2. Java8 Stream 中交集的实现
//Java8 Stream 中交集的实现
@Test
public void intersectionJava8(){
//向集合中添加元素
ArrayList<String> datas = new ArrayList<>();
Collections.addAll(datas, "张三", "李四", "王五", "赵六");
//向集合中添加元素
ArrayList<String> arrs = new ArrayList<>();
Collections.addAll(arrs, "田七", "赵六", "张三", "阿飞");
// 求交集
//交集
List<String> list3 = datas.stream().filter(arrs::contains).collect(Collectors.toList());
System.out.println(list3);
}
二、并集
并集的实现
//并集
@Test
public void union(){
ArrayList<String> datas = new ArrayList<>();
//向集合中添加元素
Collections.addAll(datas, "张三", "李四", "王五", "赵六");
//向集合中添加元素
ArrayList<String> arrs = new ArrayList<>();
Collections.addAll(arrs, "田七", "赵六", "张三", "阿飞");
// 求并集
datas.removeAll(arrs);//先从本集合中删除另一个集合中相同的元素
datas.addAll(arrs);//再把另外一个集合中所有元素,添加到本集合中
for (String str : datas) {
System.out.println(str);
}
}
三、差集
1. 差集的实现
//差集:两个集合排除相同的剩余部分!
@Test
public void DifferenceSet(){
ArrayList<String> datas = new ArrayList<>();
//向集合中添加元素
Collections.addAll(datas, "张三", "李四", "王五", "赵六");
//向集合中添加元素
ArrayList<String> arrs = new ArrayList<>();
Collections.addAll(arrs, "田七", "赵六", "张三", "阿飞");
// 求差集 张三,李四,王五 ,赵六 | 田七,赵六,张三 ,阿飞 ---> 李四,王五,田七,阿飞
ArrayList<String> list = (ArrayList<String>) datas.clone();// 张三,李四,王五 ,赵六
datas.removeAll(arrs);// datas 李四,王五
arrs.removeAll(list);// arrs 田七,阿飞
datas.addAll(arrs);// 李四,王五,田七,阿飞
for (String str : datas) {
System.out.println(str);
}
}
2. java8差集的实现
//差集:两个集合排除相同的剩余部分! Java8 Stream
@Test
public void DifferenceSetJava8(){
List<String> list1 = Lists.newArrayList("a", "b", "c");
List<String> list2 = Lists.newArrayList("a", "b", "d", "e");
//差集: list1 - list2
List<String> list4 = list1.stream().filter(i -> !list2.contains(i)).collect(Collectors.toList());
System.out.println(list4);
//差集: list2 - list1
List<String> list5 = list2.stream().filter(i -> !list1.contains(i)).collect(Collectors.toList());
System.out.println(list5);
}
四、补集
补集的实现
//补集
@Test
public void Complement(){
ArrayList<String> aList = new ArrayList<>();
//向集合中添加元素
Collections.addAll(aList, "1", "2", "3", "4");
//向集合中添加元素
ArrayList<String> bList = new ArrayList<>();
Collections.addAll(bList, "2", "4", "5", "6");
ArrayList<String> cList = (ArrayList<String>) aList.clone();
cList.retainAll(bList);
System.out.println("A 与 B 并集:" + cList);
bList.removeAll(cList);
System.out.println("A 关于 B 的相对补集:" + bList);
aList.removeAll(cList);
System.out.println("B 关于 A 的相对补集:" + aList);
}
五、去重
java8 去重实现
//去重java8
@Test
public void delRepeat(){
ArrayList<String> aList = new ArrayList<>();
//向集合中添加元素
Collections.addAll(aList, "1", "2", "3", "4");
//向集合中添加元素
ArrayList<String> bList = new ArrayList<>();
Collections.addAll(bList, "2", "4", "5", "6");
aList.addAll(bList);
System.out.println("A 与 B 并集:" + aList);
Set<String> collect = aList.stream().collect(Collectors.toSet());
System.out.println("去重:" + collect);
}
去重对象实现
//去重对象
@Test
public void delRepeat2(){
List<User> userList = new ArrayList<>();
userList.add(new User("ellin", 90, 1));
userList.add(new User("charles", 98, 2));
userList.add(new User("frank", 78, 3));
userList.add(new User("frank", 78, 4));
userList.add(new User("ellin", 90, 5));
userList.add(new User("ellin", 90, 5));
//使用HashSet-无序
Set<User> userSet = new HashSet<>();
userSet.addAll(userList);
System.out.println(userSet);
System.out.println("**************");
//使用LinkedHashSet-有序
List<User> newUserList = new ArrayList<>(new LinkedHashSet<>(userList));
System.out.println(newUserList.toString());
}
去重字符串实现
//去重字符串
@Test
public void delRepeat3(){
ArrayList<String> list = new ArrayList<>();
//向集合中添加元素
Collections.addAll(list, "1", "2", "3", "4","4");
List<String> newList = new ArrayList<>(new LinkedHashSet<>(list));
System.out.println(newList);
}