Java数组比较

标签 java arrays

在 Java 中工作,假设我有两个对象,感谢 obj.getClass().isArray(),我知道它们都是数组。让我们进一步说,我想将这两个数组相互比较——可能通过使用 Arrays.equals。有没有一种优雅的方法可以做到这一点,而无需求助于一个庞大的详尽 if/else 树来确定需要使用哪种风格的 Arrays.equals ?我正在寻找比这更不碍眼的东西:


      if (obj1 instanceof byte[] && obj2 instanceof byte[]) {
         return Arrays.equals((byte[])obj1, (byte[])obj2);
      }
      else if (obj1 instanceof boolean[] && obj2 instanceof boolean[]) {
         ...

最佳答案

你可以使用反射。

public static boolean arrayEquals(Object arr1, Object arr2) throws Exception {
    Class<?> c = arr1.getClass();
    if (!c.getComponentType().isPrimitive()) {
        c = Object[].class;
    }
    Method m = Arrays.class.getMethod("equals", c, c);
    return (Boolean) m.invoke(null, arr1, arr2);
}

反射仅用于在运行时找到正确的方法,而不是您希望避免的麻烦;实际Arrays.equals方法应该运行得非常快。

显然,生产版本需要更强大的异常处理。您可能还想使用 deepEquals(Object[], Object[])而不是 equals(Object[], Object[])对于非原始数组。

关于Java数组比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2493711/

相关文章:

java - Java 中的 SLinkedList 和 Node

java - 仍然对 Maven 中的目标感到困惑

java - Java自动生成内循环的方法

java - URLClassLoader 不加载 jar 文件

arrays - 为什么 C 数组元素(貌似)存储在 4 个 block 中?

Java 检查文件夹名称中是否有 14 位数字

php - 从 PHP 查询返回一个数组

c++ - 如何使用二维语法访问指针?

python - 集成依赖于两个数组的函数

php - 创建具有指定数量元素的数组