`
johnjobe
  • 浏览: 46697 次
  • 性别: 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怎么办啊

相关推荐

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

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

    java代码-java使用AES加密解密 AES-128-ECB加密

    java代码-java使用AES加密解密 AES-128-ECB加密 ——学习参考资料:仅用于个人学习使用

    Java集合排序及java集合类详解.pdf

    ### Java集合排序及Java集合类详解 #### 一、集合框架概述 集合框架是Java编程语言的核心组件之一,用于组织和操作数据集。Java集合框架提供了多种数据结构,包括列表(List)、集(Set)和映射(Map),这些数据结构...

    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...

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

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

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

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

    Java集合框架总结

    本文档将深入探讨Java集合框架的关键组成部分、它们之间的关系以及如何有效地使用它们。 #### 二、Java集合框架结构 Java集合框架的核心部分包括以下几类: - **集合接口**:主要包括`Collection`、`Set`、`List`...

    MySQL-connector-java-8.0.28

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

    Java集合框架使用总结

    ### Java集合框架使用总结 #### 一、概述 在Java编程中,集合框架是一个非常重要的概念,它提供了标准的方式来存储和操作数据集合。Java集合框架的设计原则是将数据结构抽象成一组接口,再通过不同的实现类来具体...

    java集合框架图

    Java集合框架是Java标准库的重要组成部分,它提供了存储和操作对象的各种数据结构。通过使用集合框架,开发人员可以轻松地管理不同类型的数据集,并且能够利用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.30

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

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

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

    JAVA集合试题库.pdf

    该操作会修改调用此方法的集合,并返回一个布尔值表示该集合是否发生了改变。 **示例代码分析:** ```java Collection c1 = new ArrayList(); c1.add("hello"); c1.add("java"); c1.add("world"); Collection c2 ...

    java_jdk-8u161-windows-x64(jdk官方版本1.8)

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

    mysql-connector-java-5.1.47 jar包

    总而言之,`mysql-connector-java-5.1.47.jar`是Java应用程序与MySQL数据库之间的重要组件,它实现了JDBC标准,使得Java开发者能够方便地操作MySQL数据库,进行数据的存取和处理。在项目中正确配置和使用该驱动,...

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

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

    mysql-connector-java-8.0.11

    在这个"mysql-connector-java-8.0.11"压缩包中,包含的是MySQL官方发布的针对Java的最新版本连接器,版本号为8.0.11。 1. **JDBC接口**:JDBC是Java语言访问数据库的标准接口,由Java SE的java.sql包提供。它定义了...

    java集合体系结构完结篇-Map集合

    java集合体系结构完结篇-Map集合

Global site tag (gtag.js) - Google Analytics