我有未知類型的兩列...有沒有辦法來檢查元素都是相同的:的Java數組比較
public static boolean equals(Object a , Object b) {
if (a instanceof int[])
return Arrays.equals((int[]) a, (int[])b);
if (a instanceof double[]){
////etc
}
我想這樣做沒有所有的instanceof檢查....
我有未知類型的兩列...有沒有辦法來檢查元素都是相同的:的Java數組比較
public static boolean equals(Object a , Object b) {
if (a instanceof int[])
return Arrays.equals((int[]) a, (int[])b);
if (a instanceof double[]){
////etc
}
我想這樣做沒有所有的instanceof檢查....
ArrayUtils.isEquals()從Apache Commons確實如此。它也處理多維數組。
陣列公用事業類可能會幫這個:
http://download.oracle.com/javase/1.4.2/docs/api/java/util/Arrays.html
有一種方法:
equals(Object[] a, Object[] a2)
相比之下對象的數組。
你應該嘗試Arrays.deepEquals(a, b)
如果數組類型是未知的,你不能簡單地轉換爲Object[]
,因此在java.util.Arrays
不能使用方法(equals
,deepEquals
)。
但是,您可以使用反射來獲取數組的長度和項目,並遞歸地比較它們(項目可能是數組本身)。
這裏有一個一般實用的方法來比較兩個對象(數組也支持),它允許一個或甚至兩者爲空:
public static boolean equals (Object a, Object b) {
if (a == b) {
return true;
}
if (a == null || b == null) {
return false;
}
if (a.getClass().isArray() && b.getClass().isArray()) {
int length = Array.getLength(a);
if (length > 0 && !a.getClass().getComponentType().equals(b.getClass().getComponentType())) {
return false;
}
if (Array.getLength(b) != length) {
return false;
}
for (int i = 0; i < length; i++) {
if (!equals(Array.get(a, i), Array.get(b, i))) {
return false;
}
}
return true;
}
return a.equals(b);
}
增加了一些方法聲明部分(公共靜態...) - 否則它會像ruby方法調用通過的塊一樣查找我:-) – Vladimir