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

下面是两个实现。

 

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;
    }
}

posted on 2010-05-11 12:24  冰羽的世界  阅读(1514)  评论(0编辑  收藏  举报