比较Java中不同类型的数组大小

时间:2019-01-26 18:34:29

标签: java arrays

所以我想创建一个方法来验证两个数组的长度相同,如:

validateSameSize(Object[] first, Object[] second) {
   if (first.length != second.length) throw new Exception();
}

问题在于此方法仅适用于非原始数组。如果我想将char数组与另一个数组进行比较,则不起作用。有没有办法在没有太多开销的情况下实现此功能?

我已经尝试过

<T,V> validateSameSize(T[] first, V[] second)

但是由于泛型也需要一个类并且不能与原始类型一起使用,因此这是行不通的。还有

validateSameSize(Array first, Array second)

也不起作用

2 个答案:

答案 0 :(得分:9)

您可以使用Array#getLength

public static boolean sameSize(Object arrayA, Object arrayB) {
    return Array.getLength(arrayA) == Array.getLength(arrayB);
}

它适用于非基本数组以及原始数组:

System.out.println(sameSize(new int[0], new int[100])); // false
System.out.println(sameSize(new char[0], new int[0])); // true
System.out.println(sameSize(new Object[0], new Object[0])); // true
System.out.println(sameSize(new Object[0], new List[0])); // true

也不要忘记将不是数组的Object传递到Array#getLength会导致IllegalArgumentException

此代码:

Object notArray = 100;
System.out.println(Array.getLength(notArray));

产生:

Exception in thread "main" java.lang.IllegalArgumentException: Argument is not an array

如果需要在调用Array#getLength之前快速失败,则可以检查参数是否为实际上数组:

if (!object.getClass().isArray()) {
  // object is not array. Do something with it
}

答案 1 :(得分:3)

caco3的答案很好。
请注意,如果Object参数不是数组,则只能在运行时发现它。
一种更安全的方法是重载基元的方法:

void validateSameSize(Object[] first, Object[] second) throws Exception {
    if (first.length != second.length) throw new Exception();
}

void validateSameSize(int[] first, int[] second) throws Exception {
    if (first.length != second.length) throw new Exception();
}

等等...
这将需要您编写更多代码,但您的代码会更健壮。