2011-10-23 22 views
9

मैं अज्ञात प्रकार के दो सरणियों है ... वहाँ तत्व एक ही कर रहे हैं की जाँच करने के लिए एक रास्ता है:जावा की तुलना सरणी

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 जांच के बिना ऐसा करना चाहते हैं ....

+0

जोड़ा कुछ विधि घोषणा भागों (public static ...) - अन्यथा यह मुझे पास ब्लॉक के साथ रूबी विधि कॉल के रूप में देखा :-) – Vladimir

उत्तर

16

ArrayUtils.isEquals()Apache Commons से बिल्कुल ठीक है। यह बहु-आयामी सरणी भी संभालता है।

+2

क्या इसके लिए गैर-कोर लाइब्रेरी का उपयोग करने का कोई फायदा है? यदि नहीं, तो इसके बजाय मानक Arrays.equals के साथ जाना बेहतर है। मैं किसी भी व्यक्ति को चयनित उत्तर की तलाश में भ्रमित नहीं करना चाहता हूं। Apache Commons से एक मानक विधि का उपयोग करने के लिए यह अधिक स्वाभाविक रूप से लगता है। मैं Arrays.equals को – Vladimir

+2

ठीक से चुनता हूं - ऐसा लगता है कि समस्या यह है कि Arrays.equals और Arrays.deepEquals के साथ आप ArrayUtils.isEquals जैसे ऑब्जेक्ट के रूप में सरणी को पार नहीं कर सकते हैं - अब इसे प्राप्त करें। – Vladimir

0

की कोशिश करनी चाहिए सरणी प्रकार अज्ञात है, तो आप बस 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); 
} 
संबंधित मुद्दे