`
凤凰涅磐
  • 浏览: 86573 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

求两个集合差的几种常见算法(转)

阅读更多

有两个数组:

String[] arr01={"Andy","Bill","Cindy","Douglas","Felex","Green"};
String[] arr02={"Andy","Bill","Felex","Green","Gates"};
求存在于arr01而不存在于arr02的元素的集合?

 

最容易想到的解法-双重循环

Java代码 
  1. import java.util.ArrayList;  
  2. import java.util.List;  
  3.   
  4. /**  
  5.  * 利用双重循环实现的筛选 
  6.  */  
  7. public class DoubleCycling{  
  8.     public static void main(String[] args){  
  9.         String[] arr01={"Andy","Bill","Cindy","Douglas","Felex","Green"};  
  10.         String[] arr02={"Andy","Bill","Felex","Green","Gates"};  
  11.           
  12.         // 筛选过程,注意其中异常的用途  
  13.         List<String> ls=new ArrayList<String>();  
  14.         for(String str:arr01){  
  15.             try{  
  16.                 ls.add(getNotExistStr(str,arr02));  
  17.             }  
  18.             catch(Exception ex){  
  19.                 continue;  
  20.             }              
  21.         }  
  22.           
  23.         // 取得结果  
  24.         Object[] arr03=ls.toArray();  
  25.         for(Object str:arr03){  
  26.             System.out.println(str);  
  27.         }  
  28.     }  
  29.       
  30.     /**  
  31.      * 查找数组Arr中是否包含str,若包含抛出异常,否则将str返回 
  32.      * @param str 
  33.      * @param arr 
  34.      * @return 
  35.      * @throws Exception 
  36.      */  
  37.     public static String getNotExistStr(String str,String[] arr) throws Exception{  
  38.         for(String temp:arr){  
  39.             if(temp.equals(str)){  
  40.                 throw new Exception("");  
  41.             }  
  42.         }  
  43.           
  44.         return str;  
  45.     }  
  46. }  

 

 

速度较高的解法-利用哈希表

 

Java代码 
  1. import java.util.ArrayList;  
  2. import java.util.Collection;  
  3. import java.util.Hashtable;  
  4. import java.util.List;  
  5. import java.util.Map;  
  6.   
  7. /**  
  8.  * 利用哈希表进行筛选 
  9.  */  
  10. public class HashtableFilter{  
  11.     public static void main(String[] args){  
  12.         String[] arr01={"Andy","Bill","Cindy","Douglas","Felex","Green"};  
  13.         String[] arr02={"Andy","Bill","Felex","Green","Gates"};  
  14.           
  15.           
  16.         Map<String,String> ht=new Hashtable<String,String>();  
  17.           
  18.         // 將arr02所有元素放入ht  
  19.         for(String str:arr02){  
  20.             ht.put(str, str);  
  21.         }  
  22.           
  23.         // 取得在ht中不存在的arr01中的元素  
  24.         List<String> ls=new ArrayList<String>();  
  25.         for(String str:arr01){  
  26.             if(ht.containsKey(str)==false){  
  27.                 ls.add(str);  
  28.             }  
  29.         }  
  30.           
  31.         // 取得结果  
  32.         Object[] arr03=ls.toArray();  
  33.         for(Object str:arr03){  
  34.             System.out.println(str);  
  35.         }  
  36.     }  
  37. }  

 

 

最方便的解法-利用工具类

 

Java代码 
  1. import java.util.ArrayList;  
  2. import java.util.List;  
  3.   
  4. /**  
  5.  * 使用工具类的筛选去除 
  6.  */  
  7. public class Tool{  
  8.     public static void main(String[] args){  
  9.         String[] arr01={"Andy","Bill","Cindy","Douglas","Felex","Green"};  
  10.         String[] arr02={"Andy","Bill","Felex","Green","Gates"};  
  11.           
  12.         // 直接转的话,生成的List不支持removeAll  
  13.         List<String> ls01=new ArrayList<String>();  
  14.         for(String str:arr01){  
  15.             ls01.add(str);  
  16.         }  
  17.           
  18.         // 同上  
  19.         List<String> ls02=new ArrayList<String>();  
  20.         for(String str:arr02){  
  21.             ls02.add(str);  
  22.         }  
  23.           
  24.         // 去除arr01中存在于arr02中的元素  
  25.         ls01.removeAll(ls02);  
  26.           
  27.         // 取得结果  
  28.         Object[] arr03=ls01.toArray();  
  29.         for(Object str:arr03){  
  30.             System.out.println(str);  
  31.         }  
  32.     }  
  33. }  

 

利用二叉树的解法 

 

Java代码 
  1. import java.util.ArrayList;  
  2. import java.util.List;  
  3.   
  4. /**  
  5.  * 使用二叉樹的筛选去除 
  6.  */  
  7. public class Test{  
  8.     public static void main(String[] args){  
  9.         String[] arr01={"Andy","Bill","Cindy","Douglas","Felex","Green"};  
  10.         String[] arr02={"Andy","Bill","Felex","Green","Gates"};  
  11. font-size: 1em; margin-top: 0px; margin-righ
    分享到:
    评论

相关推荐

    取两个集合的交集

    计算两个集合的交集可以采用多种方法,下面介绍几种常见的算法: - **双循环法**:这种方法是最直观的,但效率较低。它的基本思路是遍历第一个集合中的每个元素,并检查该元素是否也存在于第二个集合中。如果存在,...

    几种常见的图论算法详解

    在本文中,我们将深入探讨几种常见的图论算法,包括最小生成树、最短路径、有向图的强连通分量以及二部图。 首先,最小生成树算法用于寻找一个无向图中连接所有顶点的边的集合,使得这些边的权重之和最小。两种常用...

    几种常见的旋转坐标变换方法

    "几种常见的旋转坐标变换方法" 旋转坐标变换是指在不同坐标系之间进行坐标变换的过程。旋转是指在空间中绕某个定点或定轴旋转一角度的运动。旋转坐标变换是科学研究中不可避免的要接触到的一个问题,例如飞机控制...

    集合幂级数的性质与应用及其快速算法

    例如,两个集合的并集对应于级数中的加法,而两个集合的交集则可以类比于乘法。这些集合运算的性质,如交换律、结合律、分配律等,为集合幂级数的性质提供了基础。 在研究集合幂级数的性质时,文章提到了三种常见的...

    用Java实现几种常见的排序算法

    它将数组分为两半,分别对每一半进行排序,然后合并这两个已排序的子数组。 ```java package org.rut.util.algorithm.support; import org.rut.util.algorithm.SortUtil; public class MergeSort implements ...

    几种常用算法的C语言实现

    本文将详细介绍四种常见的算法——折半插入、二叉搜索树、直接插入以及折半查找,并提供它们的C语言实现。理解并熟练掌握这些算法对于提升编程技能和优化代码效率至关重要。 1. **折半插入**(Binary Insertion ...

    常见的几种算法介绍!

    本文将深入探讨几种常见的算法,包括排序、搜索、图论和动态规划等,并附带相关的代码示例,帮助你更好地理解和应用这些算法。 首先,我们来谈谈排序算法。排序是将一组数据按特定顺序排列的过程。其中,冒泡排序是...

    常见的几种页面算法以及应用

    本篇将详细探讨几种常见的页面算法及其应用。 1. **最佳置换算法(Optimal Page Replacement Algorithm)** 最佳置换算法是一种理想化的页面替换策略,它总是能预测未来哪一页会被最早使用,然后选择最长时间不会...

    几种常见算法的介绍及复杂度分析.pdf

    在计算机科学中,算法是解决问题或执行任务的具体步骤集合。它们是程序设计的核心,用于解决各种计算问题。本文件主要探讨的是排序算法,这是数据处理和计算机科学中最基本也是最重要的部分。 【稳定与非稳定排序】...

    基于遥感影像分析,进行分类识别,进行变化检测几种算法集合包

    "基于遥感影像分析,进行分类识别,进行变化检测几种算法集合包" 提供了一个综合的资源,旨在帮助用户理解和应用相关算法。这个集合包包含了CRCPython-master,可能是一个包含Python实现的遥感影像处理库。 遥感...

    C# 文本对比算法比较两个字符串的不同

    一种常见的算法是Levenshtein距离,它计算了将一个字符串转换为另一个字符串所需的最少单字符编辑次数。其他算法,如Longest Common Subsequence(最长公共子序列)和Diff Match Patch,也能提供类似的功能。 2. **...

    JAVA排序算法集合

    以上介绍了Java排序算法中常见的几种方法及其变体。每种算法都有其特点和适用场景,例如当数据量较小时可以选择直接插入排序或直接选择排序;当数据量较大时,归并排序和快速排序则更为合适。理解这些算法的工作原理...

    2_链表_求la和lb的交集_

    在计算机科学中,链表是一种常见的数据结构,用于存储一系列有序的数据元素。在这个问题中,我们面临的是一个特殊的链表操作:寻找两个已排序的单链表LA和LB的交集,并将结果以同样有序的单链表C的形式返回。这个...

    两个list比较 取不同的对象

    ### 两个List比较取不同的对象 在Java编程中,经常需要对两个`List`进行比较,找出它们之间的差异。这通常涉及到数据结构的理解、算法设计以及编程实现等多个方面。本文将详细探讨如何通过一个示例代码来理解如何...

    [转]两个java写的组合算法

    在IT行业中,组合算法是一种常见的数据结构和算法问题,它主要涉及到如何从一个给定的元素集合中选择若干个元素,而这些元素的排列顺序并不重要。在这个场景中,我们有两个Java编写的类,名为"choose.java"和"Comb....

    常见算法介绍详解.pdf

    下面将详细介绍几种常见的排序算法。 1. **插入排序** - **直接插入排序**:该算法的基本思想是将一个新的数据插入到已经排好序的数据列中。初始时,数组的第一个元素被认为是已排序的部分;然后,对于未排序的每...

    排序算法集合

    以上就是"排序算法集合"中常见的几种排序方法,每种算法都有其独特的优势和局限性。在实际应用中,我们需要根据数据特点和性能需求选择合适的排序算法。例如,对于小规模数据或部分有序数据,插入排序可能更优;而...

    字符串相似度比较算法

    以下是几种常见的字符串相似度比较算法的详细解释: 1. **Levenshtein 距离**: Levenshtein 距离(也称为编辑距离)是衡量两个字符串之间最少单字符编辑操作(插入、删除、替换)次数的方法。例如,将 "kitten" ...

    Java程序设计-常见算法

    本主题“Java程序设计-常见算法”主要涵盖查找算法和排序算法两个大类,下面将详细阐述这两个领域的基本概念、原理以及它们在Java中的实现。 首先,我们来讨论查找算法。查找算法的目标是在数据集合中找到特定元素...

    .net各种算法集合

    本文将详细介绍几种常见的排序算法,包括冒泡排序、快速排序和希尔排序。 **冒泡排序**是一种简单的排序算法,其基本思想是通过重复遍历待排序的数组,比较相邻元素并交换位置,使得较大的元素逐渐“浮”到数组的...

Global site tag (gtag.js) - Google Analytics