JAVA求字符串數組交集、並集和差集


  1 package string;   
  2   
  3 import java.util.HashMap;   
  4 import java.util.HashSet;   
  5 import java.util.LinkedList;   
  6 import java.util.Map;   
  7 import java.util.Map.Entry;   
  8 import java.util.Set;   
  9   
 10 public class StringArray {   
 11     public static void main(String[] args) {   
 12         //測試union   
 13         String[] arr1 = {"abc", "df", "abc"};   
 14         String[] arr2 = {"abc", "cc", "df", "d", "abc"};   
 15         String[] result_union = union(arr1, arr2);   
 16         System.out.println("求並集的結果如下:");   
 17         for (String str : result_union) {   
 18             System.out.println(str);   
 19         }   
 20         System.out.println("---------------------可愛的分割線------------------------");   
 21   
 22         //測試insect   
 23         String[] result_insect = intersect(arr1, arr2);   
 24         System.out.println("求交集的結果如下:");   
 25         for (String str : result_insect) {   
 26             System.out.println(str);   
 27         }   
 28   
 29          System.out.println("---------------------瘋狂的分割線------------------------");   
 30           //測試minus   
 31         String[] result_minus = minus(arr1, arr2);   
 32         System.out.println("求差集的結果如下:");   
 33         for (String str : result_minus) {   
 34             System.out.println(str);   
 35         }   
 36     }   
 37   
 38     //求兩個字符串數組的並集,利用set的元素唯一性   
 39     public static String[] union(String[] arr1, String[] arr2) {   
 40         Set<String> set = new HashSet<String>();   
 41         for (String str : arr1) {   
 42             set.add(str);   
 43         }   
 44         for (String str : arr2) {   
 45             set.add(str);   
 46         }   
 47         String[] result = {};   
 48         return set.toArray(result);   
 49     }   
 50   
 51     //求兩個數組的交集   
 52     public static String[] intersect(String[] arr1, String[] arr2) {   
 53         Map<String, Boolean> map = new HashMap<String, Boolean>();   
 54         LinkedList<String> list = new LinkedList<String>();   
 55         for (String str : arr1) {   
 56             if (!map.containsKey(str)) {   
 57                 map.put(str, Boolean.FALSE);   
 58             }   
 59         }   
 60         for (String str : arr2) {   
 61             if (map.containsKey(str)) {   
 62                 map.put(str, Boolean.TRUE);   
 63             }   
 64         }   
 65   
 66         for (Entry<String, Boolean> e : map.entrySet()) {   
 67             if (e.getValue().equals(Boolean.TRUE)) {   
 68                 list.add(e.getKey());   
 69             }   
 70         }   
 71   
 72         String[] result = {};   
 73         return list.toArray(result);   
 74     }   
 75   
 76     //求兩個數組的差集   
 77     public static String[] minus(String[] arr1, String[] arr2) {   
 78         LinkedList<String> list = new LinkedList<String>();   
 79         LinkedList<String> history = new LinkedList<String>();   
 80         String[] longerArr = arr1;   
 81         String[] shorterArr = arr2;   
 82         //找出較長的數組來減較短的數組   
 83         if (arr1.length > arr2.length) {   
 84             longerArr = arr2;   
 85             shorterArr = arr1;   
 86         }   
 87         for (String str : longerArr) {   
 88             if (!list.contains(str)) {   
 89                 list.add(str);   
 90             }   
 91         }   
 92         for (String str : shorterArr) {   
 93             if (list.contains(str)) {   
 94                 history.add(str);   
 95                 list.remove(str);   
 96             } else {   
 97                 if (!history.contains(str)) {   
 98                     list.add(str);   
 99                 }   
100             }   
101         }   
102   
103         String[] result = {};   
104         return list.toArray(result);   
105     }   
106 } 

程序運行,打印輸出:
求並集的結果如下:
d
abc
df
cc
---------------------可愛的分割線------------------------
求交集的結果如下:
abc
df
---------------------瘋狂的分割線------------------------
求差集的結果如下:
cc
d

 

原文引用:http://blog.sina.com.cn/s/blog_4934a04a0100fqmf.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM