`
johnjobe
  • 浏览: 47208 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

java集合的交并差补操作------个人使用

阅读更多

在实现数据挖掘一些算法或者是利用空间向量模型来发现相似文档的时候,会遇到求两个集合的交集的情况。以前一般是采用比较笨拙的办法,依次遍历其中一个集合的元素,然后判断它是否包含在另一个集合中。这样做非常机械繁琐,代码编得让人心烦,其实java的api中提供了对集合进行交、并、差运算的功能,灰常强大!看下面的例子:

public class SetOpt { 

    public List intersect(List ls, List ls2) { 
        List list = new ArrayList(Arrays.asList(new Object[ls.size()])); 
        Collections.copy(list, ls); 
        list.retainAll(ls2); 
        return list; 
    } 

    public List union(List ls, List ls2) { 
        List list = new ArrayList(Arrays.asList(new Object[ls.size()])); 
        Collections.copy(list, ls); 
       list.addAll(ls2); 
        return list; 
    } 

    public List diff(List ls, List ls2) { 
        List list = new ArrayList(Arrays.asList(new Object[ls.size()])); 
        Collections.copy(list, ls); 
        list.removeAll(ls2); 
        return list; 
    } 
    public static void main(String[] args) { 
        SetOpt opt = new SetOpt(); 
        List l1 = new ArrayList(); 
        l1.add(1); 
        l1.add(2); 
        l1.add(3); 
        l1.add(4); 
        List l2 = new ArrayList(); 
        l2.add(3); 
        l2.add(4); 
        l2.add(5); 
        l2.add(6); 
        List intersectList = opt.intersect(l1, l2); 
        System.out.println("交集:"); 
        for (int i = 0; i < intersectList.size(); i++) { 
            System.out.print(intersectList.get(i) + " "); 
        } 
        System.out.println(); 
        List unionList = opt.union(l1, l2); 
        System.out.println("并集:"); 
        for (int i = 0; i < unionList.size(); i++) { 
            System.out.print(unionList.get(i) + " "); 
        } 
        System.out.println(); 
        List diffList = opt.diff(l1, l2); 
        System.out.println("差集:"); 
        for (int i = 0; i < diffList.size(); i++) { 
            System.out.print(diffList.get(i) + " "); 
        } 
        System.out.println(); 
    } 

}

 测试结果:

交集:
3 4
并集:
1 2 3 4 3 4 5 6
差集:
1 2

注意:在进行两个集合(操作集合和被操作集合)交、并、差操作时,一定要先将操作集合拷贝一份,以拷贝的集合作为操作集合来进行运算。否则,将改变原来操作集合的内容


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/luowen3405/archive/2011/04/18/6331763.aspx

分享到:
评论
4 楼 cr135810 2015-05-08  
这个方法还有个问题,就是
例如我这么写

List<GongGl> l1 = new ArrayList<GongGl>();
        l1.add(new GongGl("a","2013"));
        l1.add(new GongGl("b","2013"));
        l1.add(new GongGl("c","2013"));
        l1.add(new GongGl("d","2013"));
        List<GongGl> l2 = new ArrayList<GongGl>();
        l2.add(new GongGl("c","2013"));
        l2.add(new GongGl("d","2013"));
        l2.add(new GongGl("e","2013"));
        l2.add(new GongGl("f","2013"));

差集的时候就比对不出来了
3 楼 cr135810 2015-05-08  
可以取两个差集,然后调用一个 并集 就得到 1256了
2 楼 sweat89 2014-02-10  
zy315351965 写道
我要取5,6怎么办啊

  List diffList = opt.diff(l2, l1);
1 楼 zy315351965 2013-03-15  
我要取5,6怎么办啊

相关推荐

    mysql-connector-java-5.1.40.zip和mysql-connector-java-5.1.10.jar

    在实际开发中,你可以将`mysql-connector-java-5.1.10.jar`添加到项目的类路径(classpath)中,或者在Maven或Gradle等构建工具的依赖管理中指定对应的版本,以确保Java应用能够找到并使用这个驱动。 总结,`mysql-...

    Java 第二阶段提升编程能力【集合】---- 代码

    Java 第二阶段提升编程能力【集合】---- 代码 Java 第二阶段提升编程能力【集合】---- 代码 Java 第二阶段提升编程能力【集合】---- 代码 Java 第二阶段提升编程能力【集合】---- 代码 Java 第二阶段提升编程能力...

    mysql-connector-java-8.0.22.jar

    包含mysql-connector-java-8.0.22.jar包含mysql-connector-java-8.0.22.jar包含mysql-connector-java-8.0.22.jar包含mysql-connector-java-8.0.22.jar包含mysql-connector-java-8.0.22.jar包含mysql-connector-java-...

    protobuf--java-3.2.0.jar & protoc-3.2.0-windows-x86_32.exe

    - 在Java项目中引入protobuf-java-3.2.0.jar,并使用生成的Java类进行数据序列化和反序列化操作。 3. **protoc-3.2.0-windows-x86_32.exe**:这是protobuf的编译器,用于将.proto文件转换为目标语言的源代码。这里...

    javacv-platform-1.3-bin.zip

    在JavaCV 1.3中,你可以利用FFmpeg进行视频的编码、解码、帧提取、格式转换等操作,对于开发音视频应用非常有用。 除此之外,JavaCV还包含了Face_recognition库,这是一个基于Eigenfaces和Fisherfaces的人脸识别...

    java集合框架面试题

    ### Java集合框架经典面试题详解 #### 1. Java集合框架概述及优点 - **定义**: Java集合框架是一个设计模式,用于组织和操纵对象集合。它由一系列接口、实现类和算法组成,提供了统一的方式管理和操作数据集合。...

    java中关于集合的操作

    - **并集、交集、差集**:`union()`, `intersection()`, `difference()`分别对应集合的并、交、差操作。 6. **泛型**: 泛型允许在集合中声明和使用特定类型的元素,提高代码安全性和可读性。 7. **并发集合**:...

    java-jdk-8u51-windows-x64.exe.zip

    Java JDK 8u51是Oracle公司发布的一个针对Windows x64操作系统的64位Java开发工具包。这个版本在2015年7月20日被标记为最新的,对于开发者来说,它是构建和运行Java应用程序的基础。下面将详细阐述Java JDK 8u51的...

    selenium-java-2.44.0、selenium-java-2.44.0-srcs、selenium-server-standalone-2.44.0

    在实际使用中,开发人员通常会将`selenium-java-2.44.0.jar` 添加到他们的项目类路径中,以便调用WebDriver API进行测试。同时,如果需要进行分布式测试,他们会启动`selenium-server-standalone-2.44.0.jar`,并在...

    java集合类知识总结--思维导图文件xmind

    java集合类知识总结--思维导图文件xmind xmind文件类型 总结了java常用集合相关问题 包括map、set、list、数组等

    MySQL-connector-java-8.0.28

    MySQL-connector-java-8.0.28 是MySQL数据库与Java应用程序之间通信的重要组件,它是一个JDBC(Java Database Connectivity)驱动程序,使得Java开发者能够通过编写Java代码来访问和操作MySQL数据库。在这个版本中,...

    mogo-java-driver-3.4.2.jar包

    例如,可以使用MongoClient类来建立连接,MongoDatabase类来操作数据库,MongoCollection类来操作集合,以及各种Document对象来表示和操作JSON格式的数据。 `mongo-java-driver-3.4.2_javadoc.jar`是一个包含API...

    Java-Java集合教程

    Java集合框架是Java编程语言中一个非常重要的组成部分,它提供了数据结构和算法的实现,使得在处理对象集合时更加高效和灵活。Java集合教程通常会涵盖以下关键知识点: 1. **集合接口**: - `Collection`:这是...

    java-8-openjdk-amd64

    1. **下载**:从官方或者第三方源获取`java-8-openjdk-amd64.tar.gz`压缩包。 2. **解压**:使用`tar`命令解压文件到指定目录。 3. **配置环境变量**:修改`~/.bashrc`或`~/.bash_profile`文件,添加`JAVA_HOME`、`...

    精通java集合框架--List,Set..

    Java集合框架是一种高度抽象且灵活的数据组织工具,它通过一系列接口来定义不同类型的数据容器,并提供了丰富的操作这些容器的方法。本文将深入探讨Java集合框架的核心概念,包括`List`、`Set`、`Map`以及它们之间的...

    Java 实例 - 集合比较源代码-详细教程.zip

    在Java编程语言中,集合是存储和操作对象的主要方式。这个详细教程主要关注的是如何比较不同的集合,这对于理解和优化程序中的数据处理至关重要。本教程通过源代码实例,深入讲解了Java集合框架中不同类型的集合(如...

    mysql-connector-java-5.1.7 jar包

    MySQL是世界上最流行的开源关系型数据库管理系统之一,而`mysql-connector-java-5.1.7.jar`是MySQL官方为了使得Java应用程序能够连接到MySQL数据库而提供的JDBC(Java Database Connectivity)驱动程序。JDBC是Java...

    mysql-connector-java-5.1.7-bin.jar

    使用"mysql-connector-java-5.1.7-bin.jar"时,需要将其添加到Java项目的类路径中。这可以通过多种方式实现,例如在IDE(如Eclipse或IntelliJ IDEA)中设置库依赖,或者在命令行运行Java程序时使用`-cp`或`-...

    java代码-使用java解决文件操作--复制文件的问题的源代码

    java代码-使用java解决文件操作--复制文件的问题的源代码 ——学习参考资料:仅用于个人学习使用!

    Java集合框架常见面试题.pdf

    根据提供的文档内容,文件是关于Java集合框架的面试题知识点总结。以下是Java集合框架的知识点详述: Java集合框架主要包括Collection接口和Map接口两大分支。Collection接口主要包括List、Set以及Queue三个子接口...

Global site tag (gtag.js) - Google Analytics