`

Java里面如何求两个集合的交集

    博客分类:
  • java
 
阅读更多
Java代码 :
public class TestIntersection {

    private static final Integer ONE = new Integer(1); 
 
    public static void main(String[] args) { 
        // a集合[a,a,b,b,b,c] 
        List<String> a = Arrays.asList("a", "a", "b", "b", "b", "c"); 
        // b集合[a,b,b,c,c] 
        List<String> b = Arrays.asList("a", "b", "b", "c", "c"); 
        Map mapa = mapForCollection(a); 
        Map mapb = mapForCollection(b); 
        // 将两个集合里不重复的元素加进来,然后会依次遍历元素的出现次数 
        Set set = new HashSet(a); 
        set.addAll(b); 
        List<String> result = new ArrayList<String>(); 
        for (Object obj : set) { 
            for (int i = 0, m = Math.min(getCountsFromMap(obj, mapa), getCountsFromMap(obj, mapb)); i < m; i++) { 
                result.add((String) obj); 
            } 
        } 
        // 看下期待的结果是不是[a,b,b,c] 
        System.out.println(result); 
 
    } 
 
    /**
     * 循环遍历集合,并对每一个元素出现的次数计数<br/>
     * 最终返回类似于{A:1,B:3,C:3}这样的map
     * 
     * @param a
     * @return
     */ 
    private static Map mapForCollection(Collection a) { 
        Map map = new HashMap(); 
        Iterator it = a.iterator(); 
        while (it.hasNext()) { 
            Object obj = it.next(); 
            Integer count = (Integer) map.get(obj); 
            if (count == null) { 
                // 表明该元素第一次出现 
                map.put(obj, ONE); 
            } else { 
                map.put(obj, new Integer(count.intValue() + 1)); 
            } 
        } 
        return map; 
    } 
 
    private static int getCountsFromMap(Object obj, Map map) { 
        Integer count = (Integer) map.get(obj); 
        return count != null ? count.intValue() : 0; 
    } 


    可以看到,先对两个不同的集合进行元素标记,并记下各自每个元素出现的次数,然后提取出两个集合中不重复的元素,
取两者中元素出现次数最少的数值,进行循环添加
分享到:
评论

相关推荐

    java求集合的并集、交集、补集、差集和对称差集

    写得比较简单,随便看看就好 该代码是离散数学的一些简单运算

    取两个集合的交集

    根据给定的信息,本文将详细解释“取两个集合的交集”的相关概念、实现方法以及具体的应用场景。本文主要分为以下几个部分:集合的基本概念、如何计算两个集合的交集、示例代码分析与理解。 ### 一、集合的基本概念...

    JAVA获取两个数据量较大的ArrayList的交集、差集以及并集

    JAVA获取两个数据量较大的ArrayList的交集、差集以及并集,记录一下以便查阅。JAVA获取两个数据量较大的ArrayList的交集、差集以及并集,记录一下以便查阅。JAVA获取两个数据量较大的ArrayList的交集、差集以及并集...

    java工具类集合

    Java工具类集合是Java开发中不可或缺的一部分,它们提供了一系列便捷的方法,帮助开发者高效地处理各种常见任务。在Java中,工具类通常被组织在各种包下,如`java.util`、`java.lang`、`java.io`等。下面将详细介绍...

    两个矩形求交快速算法

    在计算机科学领域,特别是在图形学、游戏开发以及空间数据处理中,两个矩形求交集的快速算法是一项基础且关键的技术。本文旨在深入探讨这一算法的原理与实现,特别是针对不同矩形相对位置下的交集计算策略。 ### ...

    java 中list 和map 混合使用。求补集

    使用两个list,String&gt;&gt; 求交集和补集。

    Java-两个集合取交集(4种方式).html

    java

    java 二个数组的交集,算法

    在Java编程中,处理两个数组的交集是常见的数据处理任务,这通常涉及到集合操作或者算法的应用。交集是指两个数组中都存在的元素组成的集合。本文将深入探讨如何使用不同的方法来找出两个数组的交集,并提供相关的...

    求交集和非交集

    交集是指两个或多个集合共有的元素,而非交集则是指存在于至少一个集合中但不在所有集合中的元素。在本篇内容中,我们将深入探讨如何在不同的编程语言和情境中实现求交集和非交集的操作。 首先,让我们从Python开始...

    java8 集合求差集、并集、交集的实例

    下面小编就为大家分享一篇java8 集合求差集、并集、交集的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    java集合与通用集合

    `equals(Object o)`方法是Java中的一个核心方法,用于判断两个对象是否相等。在集合中,这个方法被用来比较集合元素是否相同。如果元素实现了`Comparable`接口,可以通过`equals`方法比较大小,而`Comparable`接口...

    java集合框架的使用。集合的运算

    4. 集合的并集:通过使用addAll()方法,可以将两个集合合并成一个新的集合,这就是并集: ```java Set&lt;String&gt; set1 = new HashSet(Arrays.asList("A", "B")); Set&lt;String&gt; set2 = new HashSet(Arrays.asList("B", ...

    Java 实例 - 计算两个数组交集源代码-详细教程.zip

    在Java编程中,计算两个数组的交集是一项常见的任务,特别是在数据处理、算法实现和集合操作等场景。这个实例教程将深入讲解如何使用Java来找到两个整数数组的共同元素,即它们的交集。本教程包含源代码,旨在帮助...

    将几个集合中相同元素合并

    2. **交集**:两个或多个集合的交集是指同时存在于这些集合中的元素组成的集合。 3. **合并**:在本文档中指将具有共同元素的字符串合并成一个新的字符串的过程。 #### 三、程序设计与实现 ##### 1. 类与方法设计 ...

    Java 集合类 简单Demo

    比如`Collections.max(list)`获取列表中的最大值,`Collections.swap(list, i, j)`交换列表中两个位置的元素,以及`Collections.disjoint(set1, set2)`检查两个集合是否没有交集。 最后,对于源码部分,可能讲解了...

    JAVA集合试题库.pdf

    - `boolean retainAll(Collection c)`:保留两个集合的交集部分,即只保留两个集合共有的元素。该操作会修改调用此方法的集合,并返回一个布尔值表示该集合是否发生了改变。 **示例代码分析:** ```java ...

    java中计算集合的交差并集示例代码

    今天突然想Java如何计算集合的交差并集,主要是看Python语言的时候想起来的。下面这篇文章主要给大家介绍了关于java中计算集合的交差并集的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面...

    java集合的运算.pdf

    具体来说,需要输出两个集合的交集、并集和差集。 二、集合运算的设计 集合运算是常用的数学计算,为了更加方便地进行此类运算,在此设计了一个简单的集合运算Java程序。该程序使用数组代表集合,主要使用循环语句...

    离散数学作业 JAVA实现集合及其运算

    - **交集(Intersection)**:找出两个集合共有的元素。可以先转换为`ArrayList`,然后使用`retainAll()`方法。 ``` set1.retainAll(set2); ``` - **差集(Difference)**:在第一个集合中移除第二个集合的所有...

Global site tag (gtag.js) - Google Analytics