加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

JAVA求字符串数组交集、并集和差集

(2009-11-27 11:31:34)
标签:

java交集

java并集

java差集

java数组比较

java数组

it

分类: 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> 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.  
package string;

import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class StringArray {
    public static void main(String[] args) {
        //测试union
        String[] arr1 = {"abc", "df", "abc"};
        String[] arr2 = {"abc", "cc", "df", "d", "abc"};
        String[] result_union = union(arr1, arr2);
        System.out.println("求并集的结果如下:");
        for (String str : result_union) {
            System.out.println(str);
        }
        System.out.println("---------------------可爱的分割线------------------------");

        //测试insect
        String[] result_insect = intersect(arr1, arr2);
        System.out.println("求交集的结果如下:");
        for (String str : result_insect) {
            System.out.println(str);
        }

         System.out.println("---------------------疯狂的分割线------------------------");
          //测试minus
        String[] result_minus = minus(arr1, arr2);
        System.out.println("求差集的结果如下:");
        for (String str : result_minus) {
            System.out.println(str);
        }
    }

    //求两个字符串数组的并集,利用set的元素唯一性
    public static String[] union(String[] arr1, String[] arr2) {
        Set<String> set = new HashSet<String>();
        for (String str : arr1) {
            set.add(str);
        }
        for (String str : arr2) {
            set.add(str);
        }
        String[] result = {};
        return set.toArray(result);
    }

    //求两个数组的交集
    public static String[] intersect(String[] arr1, String[] arr2) {
        Map<String, Boolean> map = new HashMap<String, Boolean>();
        LinkedList<String> list = new LinkedList<String>();
        for (String str : arr1) {
            if (!map.containsKey(str)) {
                map.put(str, Boolean.FALSE);
            }
        }
        for (String str : arr2) {
            if (map.containsKey(str)) {
                map.put(str, Boolean.TRUE);
            }
        }

        for (Entry<String, Boolean> e : map.entrySet()) {
            if (e.getValue().equals(Boolean.TRUE)) {
                list.add(e.getKey());
            }
        }

        String[] result = {};
        return list.toArray(result);
    }

    //求两个数组的差集
    public static String[] minus(String[] arr1, String[] arr2) {
        LinkedList<String> list = new LinkedList<String>();
        LinkedList<String> history = new LinkedList<String>();
        String[] longerArr = arr1;
        String[] shorterArr = arr2;
        //找出较长的数组来减较短的数组
        if (arr1.length > arr2.length) {
            longerArr = arr2;
            shorterArr = arr1;
        }
        for (String str : longerArr) {
            if (!list.contains(str)) {
                list.add(str);
            }
        }
        for (String str : shorterArr) {
            if (list.contains(str)) {
                history.add(str);
                list.remove(str);
            } else {
                if (!history.contains(str)) {
                    list.add(str);
                }
            }
        }

        String[] result = {};
        return list.toArray(result);
    }
}
 

程序运行,打印输出:

求并集的结果如下:
d
abc
df
cc
---------------------可爱的分割线------------------------
求交集的结果如下:
abc
df
---------------------疯狂的分割线------------------------
求差集的结果如下:
cc
d

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有