Java-如何找到两个数组是否彼此重复?

Java-如何找到两个数组是否彼此重复?,java,Java,给定两个数组,如何快速找出它们的值是否相同 例如,arr1和arr2被认为是相同的,因为它们包含相等的值,而arr2和arr3则不是 int[] arr1 = new int[]{-1, 0, 1}; int[] arr2 = new int[] {-1, 0, 1}; int[] arr3 = new int[] {0, -1, 1}; // not identical 最快的方法是什么?我知道for循环可以工作,但是你能做得更快吗,比如说,恒定时间?HashSet不起作用,因为从技术上讲,

给定两个数组,如何快速找出它们的值是否相同

例如,arr1和arr2被认为是相同的,因为它们包含相等的值,而arr2和arr3则不是

int[] arr1 = new int[]{-1, 0, 1};
int[] arr2 = new int[] {-1, 0, 1};
int[] arr3 = new int[] {0, -1, 1}; // not identical
最快的方法是什么?我知道for循环可以工作,但是你能做得更快吗,比如说,恒定时间?HashSet不起作用,因为从技术上讲,arr1和arr2是不同的对象


Edit1:如果有N个数组,我们想过滤掉唯一的数组呢

Arrays
类中有一个
equals
方法,这里是JavaDoc:

Arrays
类中有一个
equals
方法,这里是JavaDoc:

数组。equals
将检查两个数组基于内容的相等性;它是O(n),这是最优的。你做得再好不过了

如果要在n个数组中筛选出唯一的数组,可以这样编写:

import java.nio.IntBuffer;
int[][] distinctArrays(int[]... arrays) {
  Set<IntBuffer> set = new HashSet<>();
  for (int[] array : arrays) {
    set.add(IntBuffer.wrap(array));
  }
  int[][] result = new int[set.size()][];
  int i = 0;
  for (IntBuffer wrappedArray : set) {
     result[i++] = wrappedArray.array();
  }
  return result;
}

数组。equals
将检查两个数组基于内容的相等性;它是O(n),这是最优的。你做得再好不过了

如果要在n个数组中筛选出唯一的数组,可以这样编写:

import java.nio.IntBuffer;
int[][] distinctArrays(int[]... arrays) {
  Set<IntBuffer> set = new HashSet<>();
  for (int[] array : arrays) {
    set.add(IntBuffer.wrap(array));
  }
  int[][] result = new int[set.size()][];
  int i = 0;
  for (IntBuffer wrappedArray : set) {
     result[i++] = wrappedArray.array();
  }
  return result;
}

Arrays.equals
?请注意,无论使用什么方法,它都会在内部包含一个循环,因此不会是常数时间。这在物理上不能是常数时间。您必须至少读取两个数组的所有元素,这至少是O(n)。
数组。等于
?请注意,无论您使用什么方法,它在内部都会涉及一个循环,因此不会是常数时间。这在物理上不能是常数时间。您必须至少读取两个数组的所有元素,这至少是O(n)。