zoukankan      html  css  js  c++  java
  • 有两个字符串数组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;
        }
    }
    

  • 相关阅读:
    Android 编程下的计时器
    Android 编程下 java.lang.NoClassDefFoundError: cn.jpush.android.api.JPushInterface 报错
    Android 编程下的 TraceView 简介及其案例实战
    Android 编程下的日志工具类
    C#设计模式--装饰器模式
    C#设计模式--设配器模式
    C#设计模式--原型模式
    C#设计模式--建造者模式
    C#设计模式--单例模式
    C#设计模式--抽象工厂模式
  • 原文地址:https://www.cnblogs.com/thinkCoding/p/1732468.html
Copyright © 2011-2022 走看看