Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检查两个int数组是否相等-不考虑顺序_Java_Arrays_Equals - Fatal编程技术网

Java 检查两个int数组是否相等-不考虑顺序

Java 检查两个int数组是否相等-不考虑顺序,java,arrays,equals,Java,Arrays,Equals,免责声明:这是家庭作业,所以请不要只给我代码,我想解释一下如何用尽可能少的实际代码来完成这项工作 所以我有两个整数数组,它们是未排序的,长度相等,并且可以包含重复的值。因为这是家庭作业,有一个奇怪的条件,我不允许使用java.utils中的任何内容或对数组进行排序 我应该检查两个数组是否包含相同的元素,而不考虑顺序。因此,比较数组[5,6,7,5,6,3]和[6,6,7,5,5,3]会返回true,而比较[7,7,8]和[7,8,8]则不会返回true 我不知道如何做到这一点,我已经搜索了一些问

免责声明:这是家庭作业,所以请不要只给我代码,我想解释一下如何用尽可能少的实际代码来完成这项工作

所以我有两个整数数组,它们是未排序的,长度相等,并且可以包含重复的值。因为这是家庭作业,有一个奇怪的条件,我不允许使用java.utils中的任何内容或对数组进行排序

我应该检查两个数组是否包含相同的元素,而不考虑顺序。因此,比较数组[5,6,7,5,6,3]和[6,6,7,5,5,3]会返回true,而比较[7,7,8]和[7,8,8]则不会返回true

我不知道如何做到这一点,我已经搜索了一些问题,但它们似乎都使用了java.utils中的内容,或者数组不包含重复项。我已经尝试过在第一个数组中循环每个值,在第二个数组中循环每个值,检查该值是否存在,但它会在重复时出错


我将非常感谢任何形式的帮助、建议或正确方向的提示。谢谢

从第一个int数组中依次提取每个元素,然后检查是否在第二个int数组中找到它。为了让这个想法发挥作用,您需要创建一个布尔值数组,这些布尔值都初始化为
false
,以指示是否使用了第二个int数组中的值。然后,当您从第一个数组中找到每个值时,将布尔数组中的相应元素设置为
true

依次从第一个int数组中获取每个元素,并检查是否在第二个int数组中找到它。为了让这个想法发挥作用,您需要创建一个布尔值数组,这些布尔值都初始化为
false
,以指示是否使用了第二个int数组中的值。然后,当您从第一个数组中找到每个值时,将布尔数组中的相应元素设置为
true

一种方法是迭代第一个数组,并删除与在第二个数组中找到的元素相等的元素

如果在第二个数组中找不到第一个数组中的元素,则数组不相等。当您在第二个数组中找到第一个数组中的最后一个元素时,这些数组是相等的


如果不修改阵列,则必须先克隆更改的阵列

一种方法是迭代第一个数组,并删除在第二个数组中找到的相等元素

如果在第二个数组中找不到第一个数组中的元素,则数组不相等。当您在第二个数组中找到第一个数组中的最后一个元素时,这些数组是相等的


如果不修改阵列,则必须先克隆更改的阵列

这里有一个解决方案,在较长的阵列上可能会变慢,因为它是O(n²)


这里有一个解决方案,在较长的阵列上可能会变慢,因为它是O(n²)


这是一个有趣的活动,我会在自己的时间做。我建议使用两个包含两个数组表的所有值的ArrayList。我这样做是因为您可以使用
remove()
方法。循环遍历给定的第一个数组的所有元素。这将是您的引用数组。在引用数组的第一次迭代中获取对象。然后检查您的其他阵列是否 我必须控制住它。如果是这样,则检查失败,您可以当场返回
false
,如果是这样:删除它,然后获得引用数组的下一次迭代

尽管您不需要代码,但它仍在粘贴箱中:
它接受一个
对象[]。。。表
参数,并使用equals方法进行比较。如果你能像我一样成功,我相信你的老师会感到惊讶。

这是一项有趣的活动,我会在自己的时间里做。我建议使用两个包含两个数组表的所有值的ArrayList。我这样做是因为您可以使用
remove()
方法。循环遍历给定的第一个数组的所有元素。这将是您的引用数组。在引用数组的第一次迭代中获取对象。然后检查您的其他阵列是否 我必须控制住它。如果是这样,则检查失败,您可以当场返回
false
,如果是这样:删除它,然后获得引用数组的下一次迭代

尽管您不需要代码,但它仍在粘贴箱中:
它接受一个
对象[]。。。表
参数,并使用equals方法进行比较。如果你能像我一样成功,我相信你的老师会感到惊讶。

一个简单的解决方案是复制两个数组,然后对副本进行排序和比较。如果使用良好的排序算法,这就是
O(NlogN)
。如果使用正确的库方法,您可以用大约3行代码编写它


@Andy256和@Rastochastically的解决方案都应该有效,但它们都是
O(N^2)

一个简单的解决方案是复制两个数组,然后对副本进行排序和比较。如果使用良好的排序算法,这就是
O(NlogN)
。如果使用正确的库方法,您可以用大约3行代码编写它

@Andy256和@Rastochastically的解决方案都应该有效,但它们都是
O(N^2)

1公共静态布尔比较(int[]a,int[]b)
2   {
3如果(a.length!=b.length)返回false;
4.
5 aloop:for(int i=0;i// return how often n appears in an array
public static int count(int n, int[] array) { ... }

public static boolean equalarrays(int[] arr1, int[] arr2) {
   for (int i: arr1) {
       if (count(i, arr1) != count(i, arr2)) return false;
   }
   return arr1.length == arr2.length;
}
public static boolean equality(int[] list,int[] list2)
  {
    boolean result = false;
    int correct = 0;
    if(list.length == list2.length)
    {
      for(int i = 0; i< list.length; i++)
      {
        for(int j = 0; j < list2.length; j++)
        {
          if(list[i] == list2[j])
          {
            correct++;
            if(correct == list.length && correct == list2.length)
            {
              result = true;
            }
          }
        }
      }
    }
    return result;
  }
}