最近項目中遇到比較兩個字符串數組的問題,這裏列出求String[] 字符串數組交集、並集、差集的方法:java
/** * */ package com.leadal.netiler.install.util; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; /** * @author * */ public class MyStringUtil { //求兩個字符串數組的並集,利用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); } /** * 並集 * @param arr1 * @param strList * @return */ public static String[] union(String[] arr1, List<String> strList) { Set<String> set = new HashSet<String>(); for (String str : arr1) { set.add(str); } for (String str : strList) { set.add(str); } String[] result = {}; return set.toArray(result); } /** * 並集 * @param arr1 * @param strList * @param exclude 排除的字符串 * @return */ public static String[] union(String[] arr1, List<String> strList, String[] exclude) { Set<String> set = new HashSet<String>(); for (String str : arr1) { set.add(str); } for (String str : strList) { set.add(str); } for (String str : exclude){ set.remove(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); } }