数组A[i],数组B[j],其中i和j都是number类型,含义是某SP的接入码如数组A中的接入码顺序为:
1
2
3
如数组B中的接入码顺序为:
2
3
4现在需要写一个循环函数来比较数组A和数组B中的接入码,功能是:只要A和B中的接入码不是完全一样(接入码的排列顺序不一样除外,如A是排列为1,2,3 B的排列为3,2,1),则函数返回flase,否则返回true,还请达人提供一个这样的函数,谢谢:)

解决方案 »

  1.   


    import java.util.Arrays;public class Test { public static void main(String[] args) throws Exception {
    Number[] n1 = new Number[] { 1, 2, 3 };
    Number[] n2 = new Number[] { 3, 2, 1 };
    System.out.println(equals(n1, n2));
    n1 = new Number[] { 1, 2, 3 };
    n2 = new Number[] { 3, 2, 1, 4 };
    System.out.println(equals(n1, n2));
    } public static boolean equals(Number[] n1, Number[] n2) {
    Arrays.sort(n1);
    Arrays.sort(n2);
    return Arrays.equals(n1, n2);
    }
    }
    比较简单的实现了一个,如果要求高效率,需要知道大致数据量来设计优化的算法
      

  2.   

    根据两个数组做成两个set,或者List。架设为a和b。
    然后:
    return a.containsAll(b) && b.containsAll(a);
      

  3.   

    List<Integer> a = Arrays.asList(A);
    List<Integer> b = Arrays.asList(B);
    return a.containsAll(b) && b.containsAll(a); 
      

  4.   

    我要补充一下。
    如果你要用我写的那样的方法,定义的时候不能用基本类型:
    int[] A = {1,2,3,4};
    这样是不行的。
    必须写成:
    Integer[] A = {1,2,3,4};
    或者:
    String[] A = {"1","2","3","4"};
    List<String> a = Arrays.asList(A); 
      

  5.   

    public static boolean equals(int[] a,int[] b){
    Arrays.sort(a);
    Arrays.sort(b);
    return Arrays.equals(a, b);
    }
      

  6.   

    containsAll的话,无序又无所谓的咯……#8的方法是不错,不过原始数组也被修改了,可以先clone一下
      

  7.   

    好像,都不能达到要求。
    因为都忽略了重复的元素。
    看来需要再用set包装一下才行。
      

  8.   

    先clone再排序比较,有啥好说的
      

  9.   

    return a.size() == b.size() && a.containsAll(b) && b.containsAll(a);
      应该没问题吧?
      

  10.   

    数据量小的话还是用2楼的方法吧……containsAll不行
      

  11.   

    containsAll是可以的,即使有重复也没有问题:
    public static void main(String args[]) { Integer[] a = { 1, 2, 3, 4 };
    Integer[] b = { 3, 2, 4, 1, 4 };
    List<Integer> list1 = Arrays.asList(a);
    List<Integer> list2 = Arrays.asList(b);
    System.out.println(list1.containsAll(list2) && list2.containsAll(list1));
    }
    只不过必须用Integer来包装。
      

  12.   

    containAll不能解决
    {1,2,2,3}
    {1,2,3,3}
    这样的数据吧
    加个长度判断也不行的
      

  13.   

    17楼,你可把我代码copy去运行一下。不加长度就是对的。
      

  14.   

    sorry 这2天忙乎其他事,没上来看看,谢谢大家的热心帮助和讨论。方式我还是想用基本的算法来实现,不用JAVA容器来实现了。主要是算法的思路如何来实现,谢谢.
      

  15.   

    标准的应该是排序以后二路归并比较吧,复杂度Nlog2N+Nhash的化N+N,不过感觉开销可能比较大。