मैंने ऐसी कक्षाएं देखी हैं जो तुलनात्मक और तुलनात्मक दोनों को लागू करती हैं । इसका क्या मतलब है? मैं क्यों एक दूसरे पर प्रयोग करेंगे?
मैंने ऐसी कक्षाएं देखी हैं जो तुलनात्मक और तुलनात्मक दोनों को लागू करती हैं । इसका क्या मतलब है? मैं क्यों एक दूसरे पर प्रयोग करेंगे?
जवाबों:
नीचे दिया गया पाठ तुलनित्र बनाम तुलनीय से आता है
तुलनीय
एक तुलनीय वस्तु दूसरी वस्तु के साथ तुलना करने में सक्षम है। वर्ग java.lang.Comparableको अपने उदाहरणों की तुलना करने में सक्षम होने के लिए इंटरफ़ेस को लागू करना चाहिए ।
तुलनित्र
एक तुलनित्र वस्तु दो अलग-अलग वस्तुओं की तुलना करने में सक्षम है। वर्ग अपने उदाहरणों की तुलना नहीं कर रहा है, लेकिन कुछ अन्य वर्ग के उदाहरण हैं। इस तुलनित्र वर्ग को java.util.Comparatorइंटरफ़ेस को लागू करना होगा ।
लागू करने का Comparableअर्थ है " मैं खुद को किसी अन्य वस्तु के साथ तुलना कर सकता हूं। " यह आमतौर पर तब उपयोगी होता है जब एक एकल प्राकृतिक डिफ़ॉल्ट तुलना होती है।
लागू करने का Comparatorअर्थ है " मैं दो अन्य वस्तुओं की तुलना कर सकता हूं। " यह आमतौर पर तब उपयोगी होता है जब एक प्रकार के दो उदाहरणों की तुलना करने के कई तरीके होते हैं - जैसे कि आप लोगों की उम्र, नाम आदि से तुलना कर सकते हैं।
Personलागू करने से Comparableनहीं कर सकते, क्योंकि आप तब दो लोगों की तुलना कैसे बदल सकते हैं।
Person। 2) तुलनित्र, उदाहरण के लिए, PersonAgeComparatorजो दो अलग-अलग संस्थाओं की तुलना करने में सक्षम है और यह तय करता है कि उस विशेष क्रम में पहले आना चाहिए। 3) सॉर्ट कोड, जो संस्थाओं और एक तुलनित्र का एक संग्रह लेता है, और आदेश को निर्धारित करने के लिए तुलनित्र का उपयोग करके उस संग्रह को क्रमबद्ध करता है।
तुलनीय एक वर्ग को अपनी तुलना लागू करने देता है:
तुलना करके, तुलनित्र एक बाहरी तुलना है:
दोनों कार्यान्वयन में, आप अभी भी चुन सकते हैं कि आप क्या तुलना करना चाहते हैं । जेनरिक के साथ, आप ऐसा घोषित कर सकते हैं, और इसे संकलन-समय पर जांचा है। इससे सुरक्षा में सुधार होता है, लेकिन उचित मूल्य निर्धारित करना भी एक चुनौती है।
एक दिशानिर्देश के रूप में, मैं आम तौर पर सबसे सामान्य वर्ग या इंटरफ़ेस का उपयोग करता हूं, जिसके लिए उस वस्तु की तुलना की जा सकती है, सभी उपयोग के मामलों में मैं कल्पना करता हूं ... हालांकि एक परिभाषा बहुत सटीक नहीं है! :-(
Comparable<Object>आप इसे संकलन-समय पर सभी कोडों में उपयोग करने देते हैं (जो जरूरत पड़ने पर अच्छा है, या बुरा है और यदि आप संकलन-समय त्रुटि को ढीला करते हैं); आपके कार्यान्वयन को वस्तुओं के साथ सामना करना पड़ता है, और आवश्यकतानुसार डाली जाती है लेकिन एक मजबूत तरीके से।Comparable<Itself> इसके विपरीत बहुत सख्त है।मजेदार, जब आप अपने आप को उपवर्ग में ले जाते हैं, तो उपवर्ग भी तुलनात्मक होना चाहिए और इसके बारे में मजबूत होना चाहिए (या यह लिस्कोव सिद्धांत को तोड़ देगा, और आपको रनटाइम त्रुटियां देगा)।
java.lang.Comparable
Comparableइंटरफ़ेस को लागू करने के लिए , क्लास को एक ही तरीका लागू करना होगाcompareTo()
int a.compareTo(b)
आपको उस वर्ग को संशोधित करना होगा जिसका उदाहरण आप सॉर्ट करना चाहते हैं। ताकि प्रति कक्षा में केवल एक ही क्रम बनाया जा सके।
java.util.Comparator
तुलनित्र इंटरफ़ेस को लागू करने के लिए, कक्षा को एक ही विधि को लागू करना चाहिए compare()
int compare (a,b)
Comparableआमतौर पर पसंद किया जाता है। लेकिन कभी-कभी एक वर्ग पहले से ही लागू होता है Comparable, लेकिन आप एक अलग संपत्ति पर सॉर्ट करना चाहते हैं। तब आप एक का उपयोग करने के लिए मजबूर कर रहे हैं Comparator।
कुछ कक्षाएं वास्तव में Comparatorsसामान्य मामलों के लिए प्रदान करती हैं ; उदाहरण के लिए, Stringजब सॉर्ट किया जाता है तो डिफ़ॉल्ट रूप से संवेदनशील होते हैं, लेकिन एक स्थैतिक भी Comparatorकहा जाता है CASE_INSENSITIVE_ORDER।
मैं वेब पर पाए जाने वाले कम्पैरिलेटर और कम्पैरिबल के बीच कुछ अंतर हैं:
यदि आप देखते हैं कि इन दोनों के बीच तार्किक अंतर जावा में कम्पैरिज़र है, तो उसे प्रदान की गई दो वस्तुओं की तुलना करें, जबकि तुलनात्मक इंटरफ़ेस निर्दिष्ट ऑब्जेक्ट के साथ "इस" संदर्भ की तुलना करता है।
जावा में तुलनीय का उपयोग वस्तु के प्राकृतिक क्रम को लागू करने के लिए किया जाता है। जावा एपीआई स्ट्रिंग में, दिनांक और आवरण कक्षाएं तुलनात्मक इंटरफ़ेस को लागू करते हैं।
यदि कोई वर्ग जावा में तुलनीय इंटरफ़ेस लागू करता है, तो उस ऑब्जेक्ट का संग्रह या तो सूची या सरणी को संग्रह (एसओआरटी) (या एरेई.ॉर्ट) () विधि का उपयोग करके स्वचालित रूप से सॉर्ट किया जा सकता है और तुलनात्मक विधि द्वारा परिभाषित प्राकृतिक आदेश के आधार पर ऑब्जेक्ट को सॉर्ट किया जाएगा।
जावा में तुलनीय को लागू करने वाली वस्तुओं को किसी भी तुलनित्र को निर्दिष्ट किए बिना, उदाहरण के लिए ट्रीसैट में सॉर्ट किए गए नक्शे या तत्वों में कुंजी के रूप में उपयोग किया जा सकता है।
साइट: जावा में कम्पैरिलेटर और कम्पैरिबल का उपयोग कैसे करें? उदाहरण के साथ
और पढ़ें: जावा में कंपैरिलेटर और कम्पैरिबल का उपयोग कैसे करें? उदाहरण के साथ
Comparableएक प्राकृतिक आदेश के साथ वस्तुओं के लिए है। वस्तु स्वयं जानती है कि उसे कैसे आदेश दिया जाना है।
Comparatorएक प्राकृतिक आदेश के बिना वस्तुओं के लिए या जब आप एक अलग आदेश का उपयोग करना चाहते हैं।
तुलनित्र और तुलनीय इंटरफेस के बीच अंतर
Comparable किसी अन्य ऑब्जेक्ट के साथ उपयोग करके खुद की तुलना करने के लिए उपयोग किया जाता है।
Comparator दो डेटाटाइप्स ऑब्जेक्ट्स की तुलना करने के लिए उपयोग किया जाता है।
यदि आप देखते हैं कि इन दोनों के बीच तार्किक अंतर Comparatorजावा में है, तो उसे प्रदान की गई दो वस्तुओं की तुलना करें, जबकि Comparableइंटरफ़ेस निर्दिष्ट ऑब्जेक्ट के साथ "इस" संदर्भ की तुलना करता है।
Comparableजावा में वस्तु के प्राकृतिक क्रम को लागू करने के लिए उपयोग किया जाता है। जावा एपीआई स्ट्रिंग में, तिथि और आवरण कक्षाएं Comparableइंटरफ़ेस को लागू करती हैं।
यदि कोई भी वर्ग Comparableजावा में इंटरफ़ेस लागू करता है तो उस वस्तु का संग्रह Listया तो Arrayस्वचालित रूप से Collections.sort()या Array.sort()विधि या उपयोग करके सॉर्ट किया जा सकता है और compareToविधि द्वारा परिभाषित प्राकृतिक क्रम के आधार पर ऑब्जेक्ट को सॉर्ट किया जाएगा ।
Comparableजावा में कार्यान्वित होने वाली वस्तुओं को एक सॉर्ट किए गए नक्शे या तत्वों में कुंजी के रूप में उपयोग किया जा सकता है TreeSet, उदाहरण के लिए किसी भी निर्दिष्ट किए बिना Comparator।
तुलनीय और तुलनित्र को लागू करने के लिए मेरा एनोटेशन परिवाद:
public class Person implements Comparable<Person> {
private String firstName;
private String lastName;
private int age;
private char gentle;
@Override
@CompaProperties({ @CompaProperty(property = "lastName"),
@CompaProperty(property = "age", order = Order.DSC) })
public int compareTo(Person person) {
return Compamatic.doComparasion(this, person);
}
}
अधिक उदाहरण देखने के लिए लिंक पर क्लिक करें। compamatic