`
johnjobe
  • 浏览: 46892 次
  • 性别: 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-...

    MySQL的jar包,包含mysql-connector-java-5.1.49和mysql-connector-j-8.1.0

    mysql57驱动jar包,jar包...mysql-connector-java是一款由mysql推出的官方驱动,它是java通过JDBC连接操作mysql的驱动,解压之后是jar包,需安装Java环境方可使用。需要mysql connector java的朋友们可以前来下载使用。

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

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

    java-7-openjdk-amd64

    安装包:java-7-openjdk-amd64.tar.gz 使用方法 1. 拷贝至服务器/个人电脑 2. 解包 mkdir /opt/jdk/ tar -zxvf java-7-openjdk-amd64.tar.gz -C /opt/jdk/ 3. 配置编译环境 JAVA_HOME=/opt/jdk/java-7-openjdk-amd...

    javacv-platform-1.3-bin.zip

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

    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`,并在...

    java8的64位安装包jdk-8u181-windows-x64

    3. **流(Stream API)**:Stream API是Java 8为了处理集合数据而引入的新概念,它提供了一种声明式处理数据的方式,支持并行操作,从而增强了集合处理的效率。 4. **日期和时间API的改进**:Java 8用新的`java....

    java工具类集合

    - `java.util.Date` 是旧版的日期时间API,使用不便,现在已经推荐使用`java.time`包中的类,如`LocalDate`, `LocalTime`, `LocalDateTime`, `ZonedDateTime`等,这些类提供了更强大和友好的日期时间操作。...

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

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

    mysql-connector-java-5.1.30

    MySQL是世界上最受欢迎的关系型数据库管理系统之一,而`mysql-connector-java-5.1.30`是MySQL官方为Java开发者提供的数据库连接驱动包。这个驱动包使得Java应用程序能够与MySQL数据库进行无缝通信,执行SQL查询,...

    mysql-connector-java-commercial-5.1.30-bin.jar

    将要使用的是mysql-connector-java-5.1.30-bin-g.jar和mysql-connector-java-5.1.30-bin.jar 配置 在C:\Program Files\Java目录下建立mysqlforjdbc子目录,进入该目录将mysql-connector-java-5.1.30-bin.jar到该...

    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_jdk-8u161-windows-x64(jdk官方版本1.8)

    Java JDK包含了许多组件,其中最重要的是Java编译器(javac)、Java解释器(java)、Java虚拟机(JVM)以及Java类库,这些使得开发者能够编写、编译、调试和运行Java应用程序。 1. **Java编译器** (javac): 它将源...

    mysql-connector-java-8.0.29.jar

    MySQL Connector/J 8.0.29 是MySQL数据库与Java应用程序之间通信的重要桥梁,它是一个实现了Java Database Connectivity (JDBC) API的驱动程序,使得Java开发者能够方便地在Java应用中连接并操作MySQL数据库。...

    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编程语言中用于存储、管理和操作数据的一种重要工具。它提供了多种数据结构来适应不同的应用场景,从而有效地提高程序开发效率。从数据结构的角度来看,集合可以视为对数组进行的一种高级封装。 **1. ...

Global site tag (gtag.js) - Google Analytics