小编典典

比较具有相同元素但顺序不同的数组

algorithm

我在下面的代码中进行了比较,以比较具有相同元素但差异顺序不同的数组。

 Integer arr1[] = {1,4,6,7,2};
 Integer arr2[] = {1,2,7,4,6};

例如,上述数组相等,因为它们相同的元素1,2,4,6,7。如果您对大型数组有更好的代码,请分享。

编辑 如果从两个数组中获取唯一元素并且它们看起来相同,则数组也应该相等。如何在不使用任何集合类的情况下编写代码。例如:arr1 =
{1,2,3,1,2,3} arr2 = {3,2,1}方法应返回true(=两个数组都相同)。

package com.test;

public class ArrayCompare {

public boolean compareArrays(Integer[] arr1, Integer[] arr2){
    if(arr1==null || arr2==null){
        return false;
    }
    if(arr1.length!=arr2.length){
        return false;
    }

    Integer[] sortedArr1=sortArray(arr1);
    Integer[] sortedArr2=sortArray(arr2);

    for(int i=0;i<sortedArr1.length-1;i++){
        if(sortedArr1[i]!=sortedArr2[i]){
            return false;
        }
    }
     return true;
}
public void swapElements(Integer[] arr,int pos){
    int temp=arr[pos];
    arr[pos]=arr[pos+1];
    arr[pos+1]=temp;
}
public Integer[] sortArray(Integer[] arr){
    for(int k=0;k<arr.length;k++){
        for(int i=0;i<arr.length-1;i++){
            if(arr[i]>arr[i+1]){
                swapElements(arr,i);
            }
        }
    }
    return arr;
}


public static void main(String[] args) {
    Integer arr1[] = {1,4,6,7,2};
    Integer arr2[] = {1,2,7,4,6};
    ArrayCompare arrComp=new ArrayCompare();
    System.out.println(arrComp.compareArrays(arr1, arr2));
}

}


阅读 223

收藏
2020-07-28

共1个答案

小编典典

您是否关心重复计数?例如,您是否需要区分{ 1, 1, 2 }{ 1, 2, 2 }?如果没有,请使用HashSet

public static boolean compareArrays(Integer[] arr1, Integer[] arr2) {
    HashSet<Integer> set1 = new HashSet<Integer>(Arrays.asList(arr1));
    HashSet<Integer> set2 = new HashSet<Integer>(Arrays.asList(arr2));
    return set1.equals(set2);
}

如果你 对重复护理,那么要么你可以使用一个Multiset番石榴

如果要坚持使用排序版本,为什么不使用内置的排序算法而不是编写自己的算法呢?

编辑:如果您愿意修改现有数组,甚至不需要创建副本。例如:

public static boolean compareArrays(Integer[] arr1, Integer[] arr2) {
    Arrays.sort(arr1);
    Arrays.sort(arr2);
    return Arrays.equals(arr1, arr2);
}

您还可以针对数组长度不同的情况进行优化:

public static boolean compareArrays(Integer[] arr1, Integer[] arr2) {
    // TODO: Null validation...
    if (arr1.length != arr2.length) {
        return false;
    }
    Arrays.sort(arr1);
    Arrays.sort(arr2);
    return Arrays.equals(arr1, arr2);
}
2020-07-28