精华内容
下载资源
问答
  • 下面小编就为大家分享一篇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]]

    展开全文
  • Set集合取差集 使用com.google.common.collect.Sets类的difference方法。 返回两个集合差异的不可修改视图。 返回的集合包含set1包含但set2不包含的所有元素。 set2也可能包含set1不存在的元素; 这些都被...

    记录Set和List两种集合取差集的方法,不需要遍历判断,简单快捷

    两个Set集合取差集

    使用com.google.common.collect.Sets类的difference方法。

    返回两个集合差异的不可修改视图。 返回的集合包含set1包含但set2不包含的所有元素。 set2也可能包含set1不存在的元素; 这些都被忽略了。 返回集合的迭代顺序与set1的迭代顺序匹配。
    如果set1和set2是基于不同等价关系的集合(如HashSet 、 TreeSet和IdentityHashMap的 keySet 都是),则结果未定义。

     例如下面的示例,返回值是orderIdSet剔除existOrderIdSet集合后剩下的元素

    Sets.SetView<String> difference = Sets.difference(orderIdSet, existOrderIdSet);

    两个List集合取差集

    如果是简单数据类型,可以直接使用removeAll方法。

    List<String> listAB = Lists.newArrayList("A","B");
    List<String> listBC = Lists.newArrayList("B","C");
    listAB.removeAll(listBC);
    System.out.println(listA_02); // 结果:[A]
    System.out.println(listB_02); // 结果:[B, C]

    两个List集合取交集

    使用List的retainAll()方法可以实现

    仅保留此列表中包含在指定集合中的元素(可选操作)。 换句话说,从该列表中删除所有未包含在指定集合中的元素

        public static void main (String[] args){
            List<String> list1 = new ArrayList<String>();
            list1.add("A");
            list1.add("B");
            List<String> list2 = new ArrayList<String>();
            list2.add("B");
            list2.add("C");
            list1.retainAll(list2);
            System.out.println("交集:" + list1);//交集:[B]
        }

    展开全文
  • 在使用集合的时候,我们有时候需要个集合差集,这两个集合一般是List类型的集合。一般情况下,要是我们自己去造轮子的话 ,那也简单。只是。因人而异,造出来的轮子的质量也是参差不齐。既如此,何不使用别人...

    在使用集合的时候,我们有时候需要取两个集合的差集,这两个集合一般是List类型的集合。

    一般情况下,要是我们自己去造轮子的话 ,那也简单。

    只是。因人而异,造出来的轮子的质量也是参差不齐。

    既如此,何不使用别人已经造好的,专业的轮胎呢?

    下面的代码呢,是我自己实现的取list和map的差集的方法。主要是基于guava工具类的实现。

    具体看代码吧。

    package com.lxk.collectionTest;

    import com.google.common.collect.Lists;

    import com.google.common.collect.Maps;

    import com.google.common.collect.Sets;

    import java.util.Collections;

    import java.util.List;

    import java.util.Map;

    import java.util.Set;

    /**

    * 取两个集合的差集

    *

    * Created by lxk on 2017/2/17

    */

    public class GetDifferenceSet {

    public static void main(String[] args) {

    List big = Lists.newArrayList("1", "2", "3", "4", "5", "6", "7", "8", "9");

    List small = Lists.newArrayList("1", "2", "3", "3", "2", "1");

    long a=System.currentTimeMillis();

    List guava = getDifferenceSetByGuava(big, small);

    System.out.println("\r
    执行耗时 : "+(System.currentTimeMillis()-a)/1000f+" 秒 ");

    //为了显示一致,我给集合排个序,因为guava是按newHashSet集合来整的,newHashSet又是无序的,so ...

    Collections.sort(guava);

    a=System.currentTimeMillis();

    List my = getDifferenceSetByMyself(big, small);

    System.out.println("\r
    执行耗时 : "+(System.currentTimeMillis()-a)/1000f+" 秒 ");

    System.out.println(guava.toString());

    System.out.println(my.toString());

    Map bigMap = Maps.newHashMap();

    bigMap.put("1", "1");

    bigMap.put("2", "2");

    bigMap.put("3", "3");

    bigMap.put("4", "4");

    Map smallMap = Maps.newHashMap();

    smallMap.put("1", "1");

    smallMap.put("2", "2");

    a=System.currentTimeMillis();

    Map guavaMap = getDifferenceSetByGuava(bigMap, smallMap);

    System.out.println("\r
    执行耗时 : "+(System.currentTimeMillis()-a)/1000f+" 秒 ");

    System.out.println(guavaMap);

    }

    /**

    * 使用guava工具类来取List集合的差集--专业轮子谷歌造

    *

    * @param big 大集合

    * @param small 小集合

    * @return 两个集合的差集

    */

    private static List getDifferenceSetByGuava(List big, List small) {

    Set differenceSet = Sets.difference(Sets.newHashSet(big), Sets.newHashSet(small));

    return Lists.newArrayList(differenceSet);

    }

    /**

    * 自己实现取List集合的差集--自制轮子大师兄造

    *

    * @param big 大集合

    * @param small 小集合

    * @return 两个集合的差集

    */

    private static List getDifferenceSetByMyself(List big, List small) {

    Set sameString = Sets.newHashSet();

    for (String s : small) {

    sameString.add(s);

    }

    List result = Lists.newArrayList();

    for (String s : big) {

    if (sameString.add(s)) {

    result.add(s);

    }

    }

    return result;

    }

    /**

    * 自己实现取Map集合的差集--站在巨人的肩膀上造轮子

    *

    * @param bigMap 大集合

    * @param smallMap 小集合

    * @return 两个集合的差集

    */

    private static Map getDifferenceSetByGuava(Map bigMap, Map smallMap) {

    Set bigMapKey = bigMap.keySet();

    Set smallMapKey = smallMap.keySet();

    Set differenceSet = Sets.difference(bigMapKey, smallMapKey);

    Map result = Maps.newHashMap();

    for (String key : differenceSet) {

    result.put(key, bigMap.get(key));

    }

    return result;

    }

    }

    代码运行结果,如下图:

    0818b9ca8b590ca3270a3433284dd417.png

    关于,后面去hashmap集合的差集的思路:

    首先hashmap的不同都是跟key相关的,key不同,那就是不同的map。然后就根据这个key来处理,就可以取出差集啦。

    关于,执行时间问题。

    惊讶的发现,使用工具类执行时间反而有点慢,虽然只是0,023秒,估计是优化了吧,可能小数据量看不出来优劣。

    就像,stringBuffer或者stringBuilder,在乍一看的时候,好像比直接使用字符串慢一样。但,他之所以存在,肯定是有好处的。

    不然,谷歌那一帮人,干嘛整个这个出来。

    展开全文
  • 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()方法。

    展开全文
  • Java8求集合差集

    千次阅读 2018-12-06 19:06:50
    @Test public void test01(){ List&lt;Integer&gt; list1=new ArrayList&... list1.add(2); list1.add(3); List&lt;Integer&gt; list2=new ArrayList&lt;&gt;(); lis...
  • 前言java8里最大亮点是lambda,让我们用习惯C# linq的语法,也能眼前一亮。但是比起C#的语法糖还是差的很远。差集、并集、交集@Testpublic void test1(){List list1=new ArrayList<>();list1.add(1);list1.add...
  • image.png需求:用户会上送一集合,需要和DB中旧...上述需求可以转换为两个集合取 差集/交集。JDK为我们提供了对应的API方法:public static void main(String[] args) {List newList = new ArrayList<>...
  • Java集合List的差集、并集、交集一、List的差集@Testpublic void test1(){List list1 = new ArrayList();list1.add("A");list1.add("B");List list2 = new ArrayList();list2.add("B");list2.add("C");// list1....
  • 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可以极大提高...
  • JavaList差集

    千次阅读 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...
  • 一、求交集注:场景是读取两文件,把文件内容放到Set中,求两文件之间的共同元素。在这里只写对Set的操作。 public static void main(String[] args) throws Exception { String path1 = "path1"; String path2 ...
  • importjava.util.ArrayList;importjava.util.List;import staticjava.util.stream.Collectors.toList;public classTest {public static voidmain(String[] args) {List list1 = new ArrayList();list1.add("1");list...
  • public static void main(String[] args){ Listlist = ... //输出集合中元素 } } 运行程序,从集合 list 中移除 list1 中的内容,遍历集合 list,结果为“从我做起”; list.removeAll()不传参数为删除所有集合内容;
  • 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 List集合取交集并集差集

    万次阅读 2018-03-23 17:00:20
    //并集 //list1.addAll(list2); //交集 //list1.retainAll(list2); //差集 //list1.removeAll(list2);
  • java个集合取交集、并集与差集

    千次阅读 2020-07-08 14:49:18
    @Test public void test() { List<String> list1 = new ArrayList<>(); list1.add("5"); list1.add("1"); list1.add("3"); List<... list2 = new ArrayList<... list2.add("2"); .
  • 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...
  • 【精】【Java8】===两List集合取交集、并集、差集

    万次阅读 多人点赞 2018-08-14 19:03:30
    oldList(上次查询到的权限列表),currList(当前查询到的权限列表),比对两list找出:移除和增加的权限加以标识(1--增加,-1--删除)返回。 原逻辑处理方法:循环currList,如果oldList中不包含即为增加的...
  • JAVA获取两数据量较大的ArrayList的交集、差集以及并集,记录一下以便查阅。JAVA获取两数据量较大的ArrayList的交集、差集以及并集,记录一下以便查阅。JAVA获取两数据量较大的ArrayList的交集、差集以及并集...
  • 集合操作直接使用remove来比较两个集合差集,数据量达到十几万时,效率比较慢,推荐使用一下方式. package com.lcw.adapter; import java.util.*; /** * @author: craywen * @date: 2021-02-22 16:07 * @desc: ...
  • Java 计算 2 个集合(List)的差集

    千次阅读 2020-08-13 15:26:35
    有一大表集合 A 和一小表集合 B,需要找出这两个集合之间的差集,即在 A 中存在但在 B 中不存在的集合。 解决思路: 将小表集合 B 转成一 HashSet; 遍历大表全量数据,判断元素在 HashSet 中是否存在,如果...
  • java求两个集合的交集和并集java如何求两个集合的交集和并集呢??其实java的API中已经封装了方法。今天写简单的例子测试一下:(例子中以java.util.LinkedList为例)求连个集合的交集:import java.util.ArrayList;...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,000
精华内容 7,200
关键字:

java取2个集合的差集

java 订阅
友情链接: chap2-Fibre.rar