我在下面的代码中进行了比较,以比较具有相同元素但差异顺序不同的数组。
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)); }
}
您是否关心重复计数?例如,您是否需要区分{ 1, 1, 2 }和{ 1, 2, 2 }?如果没有,请使用HashSet:
{ 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从番石榴。
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); }