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

标签:
java交集java并集java差集java数组比较java数组it |
分类: JAVA |
- 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 { -
static void main(String[] args) { -
-
String[] arr1 = { "df", "abc"}; -
String[] arr2 = { "cc", "df", "d", "abc"}; -
String[] result_union = union(arr1, arr2); -
System.out.println( -
(String str : result_union) { -
System.out.println(str); -
} -
System.out.println( -
-
-
String[] result_insect = intersect(arr1, arr2); -
System.out.println( -
(String str : result_insect) { -
System.out.println(str); -
} -
-
System.out.println( -
-
String[] result_minus = minus(arr1, arr2); -
System.out.println( -
(String str : result_minus) { -
System.out.println(str); -
} -
} -
-
-
static String[] union(String[] arr1, String[] arr2) { -
Set<String> set = HashSet<String>(); -
(String str : arr1) { -
set.add(str); -
} -
(String str : arr2) { -
set.add(str); -
} -
String[] result = {}; -
set.toArray(result); -
} -
-
-
static String[] intersect(String[] arr1, String[] arr2) { -
Map<String, Boolean> map = HashMap<String, Boolean>(); -
LinkedList<String> list = LinkedList<String>(); -
(String str : arr1) { -
(!map.containsKey(str)) { -
map.put(str, Boolean.FALSE); -
} -
} -
(String str : arr2) { -
(map.containsKey(str)) { -
map.put(str, Boolean.TRUE); -
} -
} -
-
(Entry<String, Boolean> e : map.entrySet()) { -
(e.getValue().equals(Boolean.TRUE)) { -
list.add(e.getKey()); -
} -
} -
-
String[] result = {}; -
list.toArray(result); -
} -
-
-
static String[] minus(String[] arr1, String[] arr2) { -
LinkedList<String> list = LinkedList<String>(); -
LinkedList<String> history = LinkedList<String>(); -
String[] longerArr = arr1; -
String[] shorterArr = arr2; -
-
(arr1.length > arr2.length) { -
longerArr = arr2; -
shorterArr = arr1; -
} -
(String str : longerArr) { -
(!list.contains(str)) { -
list.add(str); -
} -
} -
(String str : shorterArr) { -
(list.contains(str)) { -
history.add(str); -
list.remove(str); -
} { -
(!history.contains(str)) { -
list.add(str); -
} -
} -
} -
-
String[] result = {}; -
list.toArray(result); -
} - }
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
前一篇:我的第一个存储过程