gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:04:41 24 4
gpt4 key购买 nike

我写了下面的代码来比较具有相同元素但顺序不同的数组。

 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:

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);
}

如果您确实关心重复项,那么您可以使用来自GuavaMultiset .

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

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

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);
}

关于java - 比较具有不同顺序的相同元素的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8103621/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com