精华内容
下载资源
问答
  • 下面小编就为大家分享一篇java8 集合求差集、并集、交集的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • java如何求两个集合的交集和并集呢??其实java的API中已经封装了方法。今天写个简单的例子测试一下:(例子中以java.util.ArrayList为例)package org.suk;import java.text.MessageFormat;import java.util....

    java如何求两个集合的交集和并集呢??

    其实java的API中已经封装了方法。今天写个简单的例子测试一下:(例子中以java.util.ArrayList为例)

    package org.suk;

    import java.text.MessageFormat;

    import java.util.ArrayList;

    import java.util.List;

    /**

    * Description:

    * @version V1.0 by 石冬冬-Heil Hitler on 2017/4/7 13:08

    */

    public class Test {

    /**

    * Description: 并集

    * @version V1.0 2017/4/7 13:09 by 石冬冬-Heil Hilter(dd.shi02@zuche.com)

    * @return

    */

    public static void union(){

    List list1 = new ArrayList(){{

    add("A");

    add("B");

    add("C");

    }};

    List list2 = new ArrayList(){{

    add("C");

    add("D");

    add("B");

    }};

    //求出并集

    list1.addAll(list2);

    System.out.println(list1);

    }

    /**

    * Description: 交集

    * @version V1.0 2017/4/7 13:09 by 石冬冬-Heil Hilter(dd.shi02@zuche.com)

    * @return

    */

    public static void intersection(){

    List list1 = new ArrayList(){{

    add("A");

    add("B");

    add("C");

    }};

    List list2 = new ArrayList(){{

    add("C");

    add("D");

    add("B");

    }};

    //求出交集

    list1.retainAll(list2);

    System.out.println(list1);

    }

    /**

    * Description: 差集

    * @version V1.0 2017/4/7 13:09 by 石冬冬-Heil Hilter(dd.shi02@zuche.com)

    * @return

    */

    public static void diff(){

    List list1 = new ArrayList(){{

    add("A");

    add("B");

    add("C");

    }};

    List list2 = new ArrayList(){{

    add("C");

    add("D");

    add("B");

    }};

    //求出差集

    list1.removeAll(list2);

    System.out.println(list1);

    }

    /**

    * Description: 对象集合的交集

    * @version V1.0 2017/4/7 13:21 by 石冬冬-Heil Hilter(dd.shi02@zuche.com)

    * @param null

    * @return

    */

    public static void test(){

    List list1 = new ArrayList(){{

    add(new Student("Linda",20));

    add(new Student("Bruce",20));

    add(new Student("Linda",21));

    }};

    List list2 = new ArrayList(){{

    add(new Student("Linda",21));

    add(new Student("Bruce",22));

    add(new Student("Jack",21));

    }};

    //求出交集

    list1.retainAll(list2);

    System.out.println(list1);

    }

    public static void main(String[] args) {

    union();

    intersection();

    diff();

    test();

    }

    /**

    * Description: 内部学生类

    * @version V1.0 2017/4/7 13:20 by 石冬冬-Heil Hilter(dd.shi02@zuche.com)

    * @param null

    * @return

    */

    public static class Student{

    private String name;

    private int age;

    public Student(String name, int age) {

    this.name = name;

    this.age = age;

    }

    public String getName() {

    return name;

    }

    public void setName(String name) {

    this.name = name;

    }

    public int getAge() {

    return age;

    }

    public void setAge(int age) {

    this.age = age;

    }

    @Override

    public int hashCode() {

    return (this.getName() + String.valueOf(this.getAge())).hashCode();

    }

    @Override

    public boolean equals(Object obj) {

    if(null == obj)

    return false;

    if(obj instanceof Student){

    Student other = (Student)obj;

    return this.getName().equals(other.getName()) && this.getAge() == other.getAge();

    }

    return false;

    }

    @Override

    public String toString() {

    return MessageFormat.format("[name:{0},age:{1}]",this.getName(),this.getAge());

    }

    }

    }

    输出的结果依次是:

    [A, B, C, C, D, B]

    [B, C]

    [A]

    [[name:Linda,age:21]]

    展开全文
  • Java 程序计算两个集合之间的差集在此示例中,我们将学习计算Java两个集合之间的差集。要理解此示例,您应该了解以下Java编程主题:示例1:计算两组之间的差示例importjava.util.HashSet;importjava.util.Set;...

    Java 程序计算两个集合之间的差集

    在此示例中,我们将学习计算Java中两个集合之间的差集。

    要理解此示例,您应该了解以下Java编程主题:

    示例1:计算两组之间的差

    示例import java.util.HashSet;

    import java.util.Set;

    class Main {

    public static void main(String[] args) {

    //创建第一个集合

    Set numbers = new HashSet<>();

    numbers.add(1);

    numbers.add(2);

    numbers.add(3);

    numbers.add(4);

    System.out.println("数字: " + numbers);

    //创建第二个集合

    Set primeNumbers = new HashSet<>();

    primeNumbers.add(2);

    primeNumbers.add(3);

    System.out.println("质数: " + primeNumbers);

    //HashSet1和HashSet2的差集

    numbers.removeAll(primeNumbers);

    System.out.println("没有质数的数: " + numbers);

    }

    }

    输出结果数字: [1, 2, 3, 4]

    质数: [2, 3]

    没有质数的数: [1, 4]

    在上面的示例中,我们创建了两个名为numbers和primeNumbers的集合。我们使用HashSet类实现了该集合。注意这一行,numbers.retainAll(primeNumbers);

    在这里,我们使用了removeAll()方法来计算两组之间的差集。

    示例2:使用Guava库获取两组之间的差异import java.util.HashSet;

    import java.util.Set;

    import com.google.common.collect.Sets;

    class Main {

    public static void main(String[] args) {

    //创建第一个集合

    Set languages1 = new HashSet<>();

    languages1.add("Java");

    languages1.add("JavaScript");

    languages1.add("English");

    languages1.add("Spanish");

    System.out.println("语言: " + languages1);

    //创建第二个集合

    Set languages2 = new HashSet<>();

    languages2.add("English");

    languages2.add("Spanish");

    System.out.println("人类语言: " + languages2);

    Set intersect = Sets.difference(languages1, languages2);

    System.out.println("编程语言: " + intersect);

    }

    }

    输出结果语言: [Java, JavaScript, English, Spanish]

    人类语言: [English, Spanish]

    编程语言: [Java, JavaScript]

    在上面的示例中,我们使用了Guava库来获取两组之间的差集。为了运行该程序,您需要通过在依赖项中添加Guava库来实现它。

    在这里,我们使用了Guava库中存在的Sets类的difference()方法。

    展开全文
  •   经常遇到一些集合类之间的过滤数据、合集之类的问题,在此以List为例,毕竟在数据库中取数据后,我们使用比较多的是List集合进行操作。 模板 代码 public static void main(String[] args) { List<String&...

    技术公众号:后端技术解忧铺
    关注微信公众号:CodingTechWork,一起学习进步。

    引言

      经常遇到一些集合类之间的过滤数据、求合集之类的问题,在此以List为例,毕竟在数据库中取数据后,我们使用比较多的是List集合进行操作。

    模板

    代码

    public static void main(String[] args) {
            List<String> stringList = new ArrayList<>();
            stringList.add("a");
            stringList.add("b");
            stringList.add("c");
            stringList.add("i");
            stringList.add("j");
            stringList.add("a");
    
            //一、求交集
            //方法1:直接通过retainAll直接过滤
            List<String> stringList1 =  new ArrayList<>(Arrays.asList("a,b,c,d,e,f,g,h".split(",")));
            stringList1.retainAll(stringList);
            System.out.println("交集1: " + stringList1);
    
            //方法2:通过过滤掉存在于stringList的数据
            List<String> stringList1_2 = new ArrayList<>(Arrays.asList("a,b,c,d,e,f,g,h".split(",")));
            List<String> strings = stringList1_2.stream()
                    .filter(item -> stringList.contains(item))
                    .collect(toList());
            System.out.println("交集2:" + strings);
    
            //二、并集
            //有重并集
            List<String> stringList2 =  new ArrayList<>(Arrays.asList("a,b,c,d,e,f,g,h".split(",")));
            stringList2.addAll(stringList);
            System.out.println("并集: " + stringList2);
    
            //无重并集
            List<String> stringList2_2 =  new ArrayList<>(Arrays.asList("a,b,c,d,e,f,g,h".split(",")));
            List<String> stringList_1 =  new ArrayList<>(Arrays.asList("a,b,c,i,j,a".split(",")));
            stringList2_2.removeAll(stringList_1);
            stringList_1.addAll(stringList2_2);
    
            System.out.println("无重并集: " + stringList_1);
    
            //三、求差集
            //方法1:直接使用removeAll()方法
            List<String> stringList3 =  new ArrayList<>(Arrays.asList("a,b,c,d,e,f,g,h".split(",")));
            stringList3.removeAll(stringList);
            System.out.println("差集1: " + stringList3);
    
            //方法2:通过过滤掉不存在于stringList的数据,然后和本数组进行交集处理
            List<String> stringList3_2 = new ArrayList<>(Arrays.asList("a,b,c,d,e,f,g,h".split(",")));
            stringList3_2.retainAll(stringList3_2.stream()
                    .filter(item -> !stringList.contains(item))
                    .collect(toList()));
            System.out.println("差集2:" + stringList3_2);
    
            SpringApplication.run(DemoApplication.class, args);
        }
    

    结果

    交集1: [a, b, c]
    交集2[a, b, c]
    并集: [a, b, c, d, e, f, g, h, a, b, c, i, j, a]
    无重并集: [a, b, c, i, j, a, d, e, f, g, h]
    差集1: [d, e, f, g, h]
    差集2[d, e, f, g, h]
    

    注意list赋值问题

      如果使用了赋值方式,如list1 = list0,然后list1.retainAll(list2)或者list1.removeAll(list2)其实list0的值也变化了。因为lis1和list0指向了同一个地址。
    代码

            List<String> s1 = new ArrayList<>(Arrays.asList("a,b,c,d,e,f,g,h".split(",")));
            List<String> s2 = s1;
            System.out.println("s1地址和s2是否相等(是否为同一个对象): " + (s1 == s2));
            s2.remove("g");
            s2.remove("h");
            System.out.println("s1: " + s1);
            System.out.println("s2: " + s2);
    

    结果

    s1地址和s2是否相等(是否为同一个对象): true
    s1: [a, b, c, d, e, f]
    s2: [a, b, c, d, e, f]
    

    所以我们需要使用List<String> list1= new ArrayList<>(list0);的方式
    代码

            List<String> s1 = new ArrayList<>(Arrays.asList("a,b,c,d,e,f,g,h".split(",")));
            List<String> s2 = new ArrayList<>(s1);
            System.out.println("s1地址和s2是否相等(是否为同一个对象): " + (s1 == s2));
            s2.remove("g");
            s2.remove("h");
            System.out.println("s1: " + s1);
            System.out.println("s2: " + s2);
    

    结果

    s1地址和s2是否相等(是否为同一个对象): false
    s1: [a, b, c, d, e, f, g, h]
    s2: [a, b, c, d, e, f]
    

      同时,我们1在使用removeAll()方法时,有时候会遇到报错或者失效的情形,比如List中是一个一个对象类,且没有重写过equals和hashCode方法,就会带来这种不相等的情况,从而导致失效,这个问题也要注意一下。

    展开全文
  • Java两个List差集

    千次阅读 2019-11-02 21:42:29
    1、创建测试类(TestList5.java) package com.jeff; import java.util.ArrayList; import java.util.List; public class TestList5 { public static void main(String[] args) { List<String> l1 = new...

    1、创建测试类(TestList5.java)

    package com.jeff;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class TestList5 {
    
    	public static void main(String[] args) {
    		List<String> l1 = new ArrayList<String>();
    		l1.add("A");
    		l1.add("B");
    		l1.add("C");
    		l1.add("D");
    		l1.add("E");
    		l1.add("F");
    		List<String> l2 = new ArrayList<String>();
    		l2.add("E");
    		l2.add("F");
    		l2.add("G");
    		l2.add("H");
    		l2.add("I");
    		l2.add("J");
    		// List差集
    		l1.removeAll(l2);
    		System.out.println("List差集:" + l1);
    	}
    
    }
    
    

    2、控制台输出结果
    在这里插入图片描述

    展开全文
  • java求两个集合的交集和并集java如何求两个集合的交集和并集呢??其实java的API中已经封装了方法。今天写个简单的例子测试一下:(例子中以java.util.LinkedList为例)连个集合的交集:import java.util.ArrayList;...
  • 1、测试代码 ... import org.junit.Test;...import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; /** * @author LH * @date 2020-04-28 18:11 */ publ...
  • java求两个集合差集

    2014-07-19 21:19:00
    publicstaticvoidmain(String[]args){Setset=newHashSet();Setset1=newHashSet();set.add("sanny");set.add("mary");set.add("bill");set.add("tom");set.add("tony");set.add("mark");set.add("smith"...
  • 一、交集注:场景是读取两个文件,把文件内容放到Set中,求两个文件之间的共同元素。在这里只写对Set的操作。 public static void main(String[] args) throws Exception { String path1 = "path1"; String path2 ...
  • JAVA获取两个数据量较大的ArrayList的交集、差集以及并集,记录一下以便查阅。JAVA获取两个数据量较大的ArrayList的交集、差集以及并集,记录一下以便查阅。JAVA获取两个数据量较大的ArrayList的交集、差集以及并集...
  • java8 两个list 求差集

    千次阅读 2019-07-09 17:27:00
    业务场景:调用同步接口获取当前... 调用接口获取的数据集合 List<AccountVo> list = response.getData().getItems(); 本地查询出来的账户集合 List<Account> towList = accountRepository.findAl...
  • import java.util.ArrayList;import java.util.List;import static java.util.stream.Collectors.toList;/*** @author ming* @version 1.0.0* @date 2020/6/17 14:44**/public class CollectionsTest {public static...
  • Java 8 API添加了一新的抽象称为流Stream,可以让你以一种声明的方式处理数据。Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。Stream API可以极大提高...
  • 求两个集合差集(大数据量)

    千次阅读 2018-11-20 09:22:16
    思路就是将两个集合都放入一个HashSet里面,再removeAll(),只要这两个集合不是完全相等,速度一般都可以接受,测试代码如下: package com.list; import java.io.IOException; import java.util.ArrayList; ...
  • 描述给定两个递增的整数集合,分别用链表A和B表示,出A和B的差集(即仅由在A中出现而不在B中出现的元素所构成的集合),并以同样的形式存储,同时返回该集合的元素个数。要求空间复杂度为O(1)。输入多组数据,每组...
  • 前言java8里最大亮点是lambda,让我们用习惯C# linq的语法,也能眼前一亮。但是比起C#的语法糖还是差的很远。差集、并集、交集@Testpublic void test1(){List list1=new ArrayList<>();list1.add(1);list1.add...
  • java8 集合对象求差集、交集

    千次阅读 2019-09-28 01:34:23
    差集 List<TFridCard> list = cardLiStOut.stream().filter(item -> !msgModel.getPayload().stream().map(e -> e.getTagname()).collect(Collectors.toList()).contains(item.getUniqueCode())).collect...
  • 首先创建两个集合list1、list2以及添加元素。 List<String> list1 = new ArrayList<>(); list1.add("a"); list1.add("b"); List<String> list2 = new ArrayList<>(); list2.add("b"); ...
  • 无论使用哪种方法都要重写equals方法,如果使用Set集合,还需要重写hashCode方法; public class User{ private Integer id; private String name; @Override public boolean equals(Object obj) { if(obj ==...
  • 原始对象List hrProbationMainList =new ArrayList();List hrProbationMains = probationMainDao.findAll();获取交集对象stream 转换成流 (只有变成流才能操作)filter 封装判断条件(如果true 则收集到结果中,false则...
  • 两个集合,分别含有一定数量的元素,如何快速得到两个集合的交集和差集? 举例: 给定两个集合List<String> list1和List<String> list2,假定两个集合分别具有m和n个元素,要求取出两个集合中不同的...
  • 简单说一下集合求并集、差集以及交集方法。常用方法就是集合api与jdk8中stream流.下面已案例的形式简单说下使用以及区别. public static void main(String[] args) { ArrayList<Integer> integers = new ...
  • //两集合求差集 List<String> reduce2 = Arrays.asList(split).stream().filter(item -> !Arrays.asList(ticketType.split(",")).contains(item)).collect(Collectors.toList()); //集合转数组 String[] ...
  • 数据量比较大的两个集合求交集1、使用 retainAll 函数2、使用 LinkedList + 迭代器 1、使用 retainAll 函数   import java.util.*; /** * 交集 1 */ public class ListIntersection1 { public static ...
  • 返回两个集合差异的不可修改视图。 返回的集合包含set1包含但set2不包含的所有元素。 set2也可能包含set1不存在的元素; 这些都被忽略了。 返回集合的迭代顺序与set1的迭代顺序匹配。 如果set1和set2是基于不同等价...
  • 一种复杂度为O(1)获取两个List差集的算法(JAVA)

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,230
精华内容 5,692
关键字:

java求两个集合的差集

java 订阅