关于List集合的去重与List集合的并/交/差集
List集合的去重
List集合的去重:转为Set集合进行去重:
public void test2() {
// 准备数据
Integer[] arr = {42, 14, 28, 34, 56, 2, 14};
List list = new ArrayList(Arrays.asList(arr));
// 准备set集合
Set set = new HashSet();
set.addAll(list);
// 清空list原数据,并将新的去重后的数据进行一个添加
list.clear();
// 将指定集合中的所有元素追加到此列表的末尾
list.addAll(set);
System.out.println("List=>" + list);
System.out.println("Set=>" + set);
}
注意:如果List集合中存放的是对象的话,通过Set集合去重需要需要注意,需要在对象中重写HashCode跟equals方法。
List集合的去重:通过List的contains
public void test2() { // 准备数据 Integer[] arr = {42, 14, 28, 34, 56, 2, 14}; List<Integer> list = new ArrayList<>(Arrays.asList(arr)); // 创建一个新的List集合,用于保存去重重复数据的集合 List<Integer> newList = new ArrayList<>(); for (int i = 0; i < list.size(); i++) { // 判断newList集合中是否包含元素信息 if (!newList.contains(list.get(i))) { newList.add(list.get(i)); } } System.out.println("List=>" + newList); }
List集合的去重:通过Stream流
public void test2() {
// 准备数据
Integer[] arr = {42, 14, 28, 34, 56, 2, 14};
List list = new ArrayList(Arrays.asList(arr));
// 使用JDK8的Stream流进行去重
List newList = (List) list.stream().distinct().collect(Collectors.toList());
System.out.println("List=>" + newList);
}
List集合获取数据的并交差集:
转载链接:https://www.cnblogs.com/zhaobinrui/p/14628618.html
Java8之前:
并集
并集 两个集合中去掉重复的数据就是并集
@Test public void testSet2(){ Set<String> set1 = new HashSet<>(); Set<String> set2 = new HashSet<>(); set1.add("a"); set1.add("b"); set1.add("c"); set2.add("c"); set2.add("d"); set2.add("e"); // 并集 set1.addAll(set2); System.out.println("并集是" + set1); // 并集是[a b c d e] }
交集
交集 两个集合中有相同的元素 抽取出来的数据就是为交集
@Test public void testSet1(){ Set<String> set1 = new HashSet<>(); Set<String> set2 = new HashSet<>(); set1.add("a"); set1.add("b"); set1.add("c"); set2.add("c"); set2.add("d"); set2.add("e"); // 交集 set1.retainAll(set2); System.out.println("交集是" + set1); // 交集是 c }
差集
差集 第一个集合中的数据在第二个集合中有重复时,去掉重复数据的第一个集合就是差集
@Test public void testSet3(){ Set<String> set1 = new HashSet<>(); Set<String> set2 = new HashSet<>(); set1.add("a"); set1.add("b"); set1.add("c"); set2.add("c"); set2.add("b"); set2.add("e"); // 差集 set1.removeAll(set2); System.out.println("差集是" + set1); // 差集是 a b 去掉set1中属于set2的元素 }
Java8之后:
@Test public void test1(){ List<Integer> list1 = new ArrayList<>(); list1.add(1); list1.add(2); list1.add(3); List<Integer> list2 = new ArrayList<>(); list2.add(3); list2.add(4); list2.add(5); System.out.println("==========求交集=========="); List<Integer> list = list1.stream().filter(t->list2.contains(t)).collect(Collectors.toList()); list.stream().forEach(System.out::println); System.out.println("==========求差集=========="); list = list1.stream().filter(t-> !list2.contains(t)).collect(Collectors.toList()); list.stream().forEach(System.out::println); System.out.println("==========求并集=========="); list.addAll(list1); list.addAll(list2); list = list.stream().distinct().collect(Collectors.toList()); list.stream().forEach(System.out::println); }