比如
String[] a={"abc","def","111","define"};
string[] b={"ooo","define","abc","技术问题","中国"};数组a,b是动态计算出来的,数量并非如上面那样是固定的。
怎样用一个比较好的算法找出其中a,b中都有的"def","define"?

解决方案 »

  1.   

    做一个循环
    String s="";
    for(int i=0;i<a.length;i++){
    for(int j=0;j<b.length;j++){
    if(a[i].equals(b[j]))
    s=s+a[i];
    break;
    }
    }
    大概写了点,思路是对你,你自己调调
      

  2.   

    import java.util.ArrayList;
    import java.util.List;public class test {  public static void main(String[] args) {
        String[] a = {"abc","def","111","define"};
        String[] b = {"ooo","define","abc","技术问题","中国"};
        List list = new ArrayList();
        for (int i = 0; i < a.length; i++) {
          for (int j0 = 0; j0 < b.length; j0++) {
            if(b[j0].compareTo(a[i]) == 0) {
              list.add(b[j0]);
            }
          }
        }
      }
    }
      

  3.   

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;public class CollectioinTest
    {
    public static void main(String[] args)
    {
    String[] a={"abc","def","111","define"};
    String[] b={"ooo","define","abc","技术问题","中国"}; List shared = new ArrayList(Arrays.asList(a));
    shared.retainAll(Arrays.asList(b));
    System.out.println(shared);
    }
    }
      

  4.   

    gtlang78 的方法就很简洁,已经运行正确,但不知道效率有没有两个for循环高。各位高手还有没有其他方案?
      

  5.   

    gtlang78的方法很快,效率比用双循环快了不知道多少倍.
      

  6.   

    用Collection Framework自带的方法肯定快
      

  7.   

    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 21
    at test.TestPoJo.main(TestPoJo.java:39)
      

  8.   

    老兄,你只要调用现成的方法就可以了,何必问其内部是怎么实现的呢?刚好今天才考数据结构,就着余兴不妨YY一通算法:
    1、二重循环的时间复杂度是o(n^2)
    2、我假定每个数组内部无重复元素
       (1)将两个数组和成一个数组,时间复杂o(n)
        (2) 对新数组实现基数排序,时间复杂o(d(n+radix));d为最大字符串长度,radix为所有字符串 中出现的字符种类数目。
       (3)统计新数组中重复元素的个数
        这个算法虽然不是最优秀,但时间复杂度也控制在o(n)了,如何?
    3、再给一算法,分别对两个数组做基数排序,再利用归并排序算法的思想比较出重复元素   这些东西估计只有我这样的学生才会用到,呵呵