取兩個string數組的交集,首先將第一個數組的值作為key,value為false存儲在map集合中;然后將第二個數組的值循環去判斷map中key是否存在,存在就講key對應的value改成true,否則不做變化;
最后,取出map中value為true的key,就是兩個數組的交集。
備注:方法一當數組中有重復數據時,map設置key時會把重復的值丟掉,方法二會將兩個數組中所有重復值打印出來;
方法一:
1 import org.testng.annotations.Test; 2 import java.util.HashMap; 3 import java.util.LinkedList; 4 import java.util.List; 5 import java.util.Map; 6 7 8 public class test { 9 @Test//測試程序 10 public void test(){ 11 String[] arr1 = {"112","wqw","2121"}; 12 String[] arr2 = {"112","aad","ewqw"}; 13 String[] result=StringIntersection(arr1,arr2); 14 for (String str:result){ 15 System.out.printf(str); 16 } 17 } 18 //取兩個string數組的交集 19 public String[] StringIntersection(String[] arr1,String[] arr2){ 20 Map<String,Boolean> map = new HashMap<String,Boolean>(); 21 List<String> list = new LinkedList<String>(); 22 //取出str1數組的值存放到map集合中,將值作為key,所以的value都設置為false 23 for (String str1:arr1){ 24 if (!map.containsKey(str1)){ 25 map.put(str1,Boolean.FALSE); 26 } 27 } 28 //取出str2數組的值循環判斷是否有重復的key,如果有就將value設置為true 29 for (String str2:arr2){ 30 if (map.containsKey(str2)){ 31 map.put(str2,Boolean.TRUE); 32 } 33 } 34 //取出map中所有value為true的key值,存放到list中 35 for (Map.Entry<String,Boolean> entry:map.entrySet()){ 36 if (entry.getValue().equals(Boolean.TRUE)){ 37 list.add(entry.getKey()); 38 } 39 } 40 //聲明String數組存儲交集 41 String[] result={}; 42 return list.toArray(result); 43 } 44 }
方法二:
package com.java8; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class StringArrayTest { public static void main(String[] args) { String[] arr1 = {"112","wqw","2121","112"}; String[] arr2 = {"112","aad","ewqw", "112"}; List list1 = Arrays.asList(arr1); //將數組轉化為list List list2 = Arrays.asList(arr2); List list = (List) list1.stream().filter(a -> list2.contains(a)).collect(Collectors.toList()); System.out.println(list); //打印出list String[] arr = (String[])list.toArray(new String[list.size()]); //轉化為數組 for (String a:arr){ System.out.println(a); //打印出數組中每個元素 } } }