您的位置:首页 > 其它

有两个字符串数组a和b,寻找相同元素 (a和b都比较大)

2010-05-11 12:24 633 查看
下面是两个实现。

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐