JAVA程序:字符串数组交集、并集和差集

[python]  view plain  copy
  1. package cn.yuhui.com;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5. import java.util.HashSet;  
  6. import java.util.Iterator;  
  7. import java.util.LinkedList;  
  8. import java.util.List;  
  9. import java.util.Map;  
  10. import java.util.Map.Entry;  
  11. import java.util.Set;  
  12.   
  13. public class jaccard {  
  14.   
  15.     public static void main(String[] args) {  
  16.           
  17.          work();  
  18.           
  19.     }  
  20.   
  21.     public static void work(){  
  22.   
  23.         List<String> liOne = new ArrayList<String>();  
  24.         liOne.add("a b c d");  
  25.         liOne.add("e g i w");  
  26.         liOne.add("c j k x");  
  27.         liOne.add("d k r y");  
  28.         liOne.add("q r s t");  
  29.         liOne.add("u v w x");  
  30.         liOne.add("g n u v");  
  31.         liOne.add("c d e f");  
  32.         liOne.add("a h i j");  
  33.         liOne.add("k l m n");  
  34.           
  35.         List<String> liTwo = new ArrayList<String>();  
  36.         liTwo.add("a h o v");  
  37.         liTwo.add("b i p w");  
  38.         liTwo.add("c j q x");  
  39.         liTwo.add("d k r y");  
  40.         liTwo.add("e l s z");  
  41.         liTwo.add("f m w x");  
  42.         liTwo.add("g n u v");  
  43.         liTwo.add("c d e f");  
  44.         liTwo.add("g h i j");  
  45.         liTwo.add("a l m o");  
  46.   
  47.         for (int i = 0; i < liOne.size(); i++) {  
  48.               
  49.             String[] arr1 = liOne.get(i).split(" ");  
  50.               
  51.             String[] arr2 = liTwo.get(i).split(" ");  
  52.               
  53.             relativelycompare(arr1 , arr2);  
  54.         }  
  55.           
  56.           
  57.     }  
  58.       
  59.     public static void relativelycompare(String[] arr1 ,String[] arr2 ){  
  60.       
  61.         System.out.print("File01内容为:");  
  62.         ArrayToPrin(arr1);  
  63.           
  64.         System.out.print(" || File02内容为:");  
  65.         ArrayToPrin(arr2);  
  66.           
  67.         //求两个数组的交集   
  68.         Map<String, Boolean> map = new HashMap<String, Boolean>();     
  69.         LinkedList<String> listjiaoji = new LinkedList<String>();     
  70.         for (String str : arr1) {     
  71.             if (!map.containsKey(str)) {     
  72.                 map.put(str, Boolean.FALSE);     
  73.             }     
  74.         }     
  75.         for (String str : arr2) {     
  76.             if (map.containsKey(str)) {     
  77.                 map.put(str, Boolean.TRUE);     
  78.             }     
  79.         }     
  80.     
  81.         for (Entry<String, Boolean> e : map.entrySet()) {     
  82.             if (e.getValue().equals(Boolean.TRUE)) {     
  83.                 listjiaoji.add(e.getKey());     
  84.             }     
  85.         }     
  86.         System.out.print(" || 交集为:");  
  87.         ListToPrin(listjiaoji);  
  88.           
  89.         //求两个字符串数组的并集,利用set的元素唯一性  
  90.         List<String> listbingji = new ArrayList<String>();  
  91.         Set<String> set = new HashSet<String>();     
  92.         for (String str : arr1) {     
  93.             set.add(str);     
  94.         }     
  95.           
  96.         for (String str : arr2) {    
  97.             set.add(str);     
  98.         }     
  99.            
  100.         Iterator<String> iterator1 = set.iterator();  
  101.         while(iterator1.hasNext()){  
  102.             listbingji.add(iterator1.next());  
  103.         }  
  104.           System.out.print(" || 并集为:");  
  105.           ListToPrin(listbingji);  
  106.            
  107.             
  108.         //求两个数组的差集   
  109.        LinkedList<String> chaji = new LinkedList<String>();     
  110.        LinkedList<String> history = new LinkedList<String>();     
  111.        String[] longerArr = arr1;     
  112.        String[] shorterArr = arr2;     
  113.         //找出较长的数组来减较短的数组     
  114.         if (arr1.length > arr2.length) {     
  115.             longerArr = arr2;     
  116.             shorterArr = arr1;     
  117.         }     
  118.         for (String str : longerArr) {     
  119.             if (!chaji.contains(str)) {     
  120.                 chaji.add(str);     
  121.             }     
  122.         }     
  123.         for (String str : shorterArr) {     
  124.             if (chaji.contains(str)) {     
  125.                 history.add(str);     
  126.                 chaji.remove(str);     
  127.             } else {     
  128.                 if (!history.contains(str)) {     
  129.                     chaji.add(str);     
  130.                 }     
  131.             }     
  132.         }     
  133.            
  134.           System.out.print(" ||差集为:");  
  135.           ListToPrin(chaji);  
  136.           System.out.println();  
  137.     }  
  138.       
  139.     public static void ListToPrin(List<String> list){  
  140.         for (int i = 0; i < list.size(); i++) {  
  141.             System.out.print(list.get(i)+" ");  
  142.         }  
  143.     }  
  144.       
  145.     public static void ArrayToPrin(String[] arr){  
  146.           
  147.         for (String str : arr) {     
  148.             System.out.print(str+" ");    
  149.         }    
  150.     }  
  151. }  
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java小技巧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值