2010-04-13 6 views
8

तुलना करने पर लागू करने के लिए(), "अंतर" की डिग्री को ध्यान में रखा जाना चाहिए?तुलनात्मक रूप से लागू होने पर विशिष्ट हस्ताक्षरित पूर्णांक मामला एक तुलनात्मक <Type> कक्षा में तुलना करने के लिए करता है?

उदाहरण के लिए, यदि मेरे पास 3 ऑब्जेक्ट्स, सी 1, सी 2 और सी 3 हैं, जैसे कि सीसी 2 < सी 3।

क्या C1.compareTo (C2) C2.compareTo (C3) से कम एक पूर्णांक लौटाए?

तुलनात्मक इंटरफ़ेस के लिए प्रलेखन एक या दूसरे तरीके से निर्दिष्ट नहीं प्रतीत होता है, इसलिए मुझे लगता है कि डिग्री कोई फर्क नहीं पड़ता है, लेकिन यह जानना अच्छा होगा कि कोई विशिष्ट नंबर लौटने का कोई लाभ है या नहीं (उदाहरण के लिए, ट्रीसेट सॉर्ट गति या कुछ में सुधार)।

http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Comparable.html#compareTo(T)

+0

+1 दिलचस्प प्रश्न – whiskeysierra

उत्तर

4

दिलचस्प सवाल है, लेकिन फिर भी नहीं, int की परिमाण Comparable<T> और Comparator<T> विनिर्देशों के अनुसार कोई महत्व नहीं है, केवल संकेत। निश्चित रूप से कुछ सॉर्टिंग एल्गोरिदम अतिरिक्त रूप से निर्दिष्ट कर सकते हैं कि वे परिमाण से "संकेत" ले सकते हैं, लेकिन मुझे यकीन नहीं है कि तुलनात्मक-आधारित सॉर्टिंग के लिए यह कितना व्यावहारिक होगा, क्योंकि हमें वास्तव में केवल यह जानने की आवश्यकता है कि a < b, a == b, या a > b (जो वास्तव में Comparable और Comparator ओओपी अवशोषण हैं)।

public int compare(T t1, T t2) { 
    return t1.intField - t2.intField; 
} 

इस तुलना तरीका है कि ध्यान दें है:


अब यह कहा जा करने के लिए एक छिपा संख्यात्मक मान, कुछ इस तरह की तुलना यानी के लिए घटाव मुहावरा इस्तेमाल करने के लिए यहाँ इरादा हो सकता है की जरूरत है संभवतः टूटा हुआ, संभावित ओवरफ्लो के कारण जब दो संख्याओं के बीच अंतर Integer.MAX_VALUE से अधिक है। वास्तव में, यह Java Puzzlers में शामिल पहेली में से एक है।

प्रदर्शित करने के लिए निम्नलिखित स्निपेट (पुस्तक से लिया) पर विचार करें:

int x = -2000000000; 
int z = 2000000000; 
System.out.println(x - z); // prints a positive number due to overflow 

जाहिर x < z, और अभी तक x - z एक धनात्मक संख्या है। इस घटाव मुहावरे का उपयोग करने से सावधान रहें: इसके बजाय एक स्पष्ट तुलना और return -1, 0, या 1 इसके बजाय हमेशा अधिक सुरक्षित है।

2

नहीं, फर्क सिर्फ इतना है ऋणात्मक संख्याओं, 0, और सकारात्मक संख्या के बीच है। डिग्री अप्रासंगिक है।

संबंधित मुद्दे