zoukankan      html  css  js  c++  java
  • java集合的交并差补操作

    http://johnjobe.iteye.com/blog/1017984


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

       1public class SetOpt {   
       
    2.   
       
    3.     public List intersect(List ls, List ls2) {   
       
    4.         List list = new ArrayList(Arrays.asList(new Object[ls.size()]));   
       
    5.         Collections.copy(list, ls);   
       
    6.         list.retainAll(ls2);   
       
    7.         return list;   
       
    8.     }   
       
    9.   
      
    10.     public List union(List ls, List ls2) {   
      
    11.         List list = new ArrayList(Arrays.asList(new Object[ls.size()]));   
      
    12.         Collections.copy(list, ls);   
      
    13.        list.addAll(ls2);   
      
    14.         return list;   
      
    15.     }   
      
    16.   
      
    17.     public List diff(List ls, List ls2) {   
      
    18.         List list = new ArrayList(Arrays.asList(new Object[ls.size()]));   
      
    19.         Collections.copy(list, ls);   
      
    20.         list.removeAll(ls2);   
      
    21.         return list;   
      
    22.     }   
      
    23.     public static void main(String[] args) {   
      
    24.         SetOpt opt = new SetOpt();   
      
    25.         List l1 = new ArrayList();   
      
    26.         l1.add(1);   
      
    27.         l1.add(2);   
      
    28.         l1.add(3);   
      
    29.         l1.add(4);   
      
    30.         List l2 = new ArrayList();   
      
    31.         l2.add(3);   
      
    32.         l2.add(4);   
      
    33.         l2.add(5);   
      
    34.         l2.add(6);   
      
    35.         List intersectList = opt.intersect(l1, l2);   
      
    36.         System.out.println("交集:");   
      
    37.         for (int i = 0; i < intersectList.size(); i++) {   
      
    38.             System.out.print(intersectList.get(i) + " ");   
      
    39.         }   
      
    40.         System.out.println();   
      
    41.         List unionList = opt.union(l1, l2);   
      
    42.         System.out.println("并集:");   
      
    43.         for (int i = 0; i < unionList.size(); i++) {   
      
    44.             System.out.print(unionList.get(i) + " ");   
      
    45.         }   
      
    46.         System.out.println();   
      
    47.         List diffList = opt.diff(l1, l2);   
      
    48.         System.out.println("差集:");   
      
    49.         for (int i = 0; i < diffList.size(); i++) {   
      
    50.             System.out.print(diffList.get(i) + " ");   
      
    51.         }   
      
    52.         System.out.println();   
      
    53.     }   
      
    54.   
      
    55. } 

     测试结果:

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

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

  • 相关阅读:
    maven的pom.xml文件详细说明
    python 给视频添加马赛克
    cv2.VideoCapture 图像旋转问题
    三分钟理解知识蒸馏
    深度学习、机器学习常见概念及理解(持续更新)
    python用直方图规定化实现图像风格转换
    1分钟理解人体姿态估计与行为识别
    数据清洗要点
    3分钟理解NMS非极大值抑制
    python用pandas遍历csv文件
  • 原文地址:https://www.cnblogs.com/cuizhf/p/2176652.html
Copyright © 2011-2022 走看看