下面是两个实现。
package may;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class GetAllSameElement {
/**
* 对两个字符串
* 得到两个字符串中所有相同的元素集
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String[] str1 = {"A","B","C","D","E","F","G","A"};
String[] str2 = {"C","D","E","F","G","H","I","H","I"};
Set sameSet = getAllSameElement1(str1,str2);
Iterator itrs=sameSet.iterator();
while(itrs.hasNext()){
System.out.println(itrs.next().toString());
}
System.out.println("--------------------分割符-------------------------");
List samelist = getAllSameElement2(str1,str2);
Iterator itrl=samelist.iterator();
while(itrl.hasNext()){
System.out.println(itrl.next().toString());
}
}
/**
* 用集合的retainAll方法,
* set的retainAll性能高于list的retainAll方法。
*/
public static Set getAllSameElement1(String[] strArr1,
String[] strArr2) {
if (strArr1 == null || strArr2 == null) {
return null;
}
List list1 = new ArrayList(Arrays.asList(strArr1));
Set set1 = new HashSet(list1);
set1.retainAll(Arrays.asList(strArr2));
return set1;
}
/**
* 构造一个map,将str1中字符串作为key,值任意。
* 然后再循环str2
*/
public static List getAllSameElement2(String[] strArr1,
String[] strArr2) {
Map map = new HashMap();
List list = new ArrayList();
for(int i=0;i<strArr1.length;i++){
if(map.get(strArr1[i])==null){
map.put(strArr1[i], "1");
}
}
for (int k = 0; k < strArr2.length; k++) {
if(map.get(strArr2[k])!=null){
list.add(strArr2[k]);
}
}
return list;
}
}