comparable comparator interfaces java
यह ट्यूटोरियल उदाहरणों के साथ जावा में तुलना और तुलनात्मक इंटरफेस की अवधारणा की व्याख्या करता है। आप दोनों के बीच के अंतरों के बारे में भी जानेंगे:
हमने अपने पहले के ट्यूटोरियल में इंटरफेस के बारे में सीखा। एक इंटरफ़ेस का उपयोग अमूर्त विधियों और स्थिर या अंतिम चर को घोषित करने के लिए किया जाता है। डिफ़ॉल्ट रूप से, इंटरफ़ेस के तरीके सार्वजनिक हैं। जावा 8 के बाद से, इंटरफेस में स्थिर और डिफ़ॉल्ट तरीके भी हो सकते हैं।
जावा विभिन्न अंतर्निहित इंटरफेस प्रदान करता है जिनका उपयोग हम विभिन्न कार्यों को करने के लिए कर सकते हैं। इस ट्यूटोरियल में, हम दो ऐसे इंटरफेस पर चर्चा करेंगे, यानी कम्पैरेबल और कम्पैक्टर। एक तुलनीय इंटरफ़ेस का उपयोग प्राकृतिक ऑर्डरिंग के अनुसार ऑब्जेक्ट को सॉर्ट करने के लिए किया जाता है। तुलनित्र इंटरफ़ेस का उपयोग विभिन्न वस्तुओं की व्यक्तिगत विशेषताओं को सॉर्ट करने के लिए किया जाता है।
=> यहाँ सरल जावा प्रशिक्षण श्रृंखला का अन्वेषण करें।
आइए एक तुलनात्मक इंटरफ़ेस के साथ शुरुआत करें।
आप क्या सीखेंगे:
जावा में तुलनीय इंटरफ़ेस
तुलनात्मक इंटरफ़ेस कस्टम ऑब्जेक्ट्स वाले Arrays और ArrayLists जैसी सूची संरचनाओं को सॉर्ट करता है। एक बार जब सूची ऑब्जेक्ट्स तुलनात्मक इंटरफ़ेस को लागू करते हैं, तो हम सामग्री को सॉर्ट करने के लिए एरे के मामले में कलेक्शन.सॉर्ट () विधि या एरेस.सोर्ट () का उपयोग कर सकते हैं।
लेकिन जब हमारे पास कस्टम कक्षाएं हैं और हमें उनकी वस्तुओं को क्रमबद्ध करने की आवश्यकता है, तो हमें इस वर्ग में तुलनात्मक इंटरफ़ेस को लागू करना होगा। तुलना इंटरफ़ेस का एक हिस्सा है java.lang पैकेज। इस इंटरफ़ेस में केवल एक विधि है, तुलना ()। एक तुलनीय इंटरफ़ेस का उपयोग करके, हम एक बार में एक एकल डेटा सदस्य को सॉर्ट कर सकते हैं।
उदाहरण के लिए, यदि हमारे नाम और आयु हमारी कक्षा में फ़ील्ड के रूप में हैं तो एक समय में हम या तो कक्षा की वस्तुओं को नाम या आयु पर सॉर्ट कर सकते हैं। हम नाम और उम्र दोनों पर एक साथ क्रमबद्ध नहीं कर सकते।
जैसा कि ऊपर बताया गया है, हम जावा में तुलनात्मक इंटरफ़ेस को लागू करने के लिए एक कस्टम क्लास होने से तुलनात्मक इंटरफ़ेस को लागू कर सकते हैं। तुलनात्मक इंटरफ़ेस में केवल एक ही तरीका है 'तुलना' जो कस्टम ऑब्जेक्ट्स को सॉर्ट करने के लिए कक्षा में ओवरराइड किया जाता है।
'तुलना' विधि
दी गई वस्तु की वर्तमान वस्तु की तुलना करने के लिए तुलनात्मक इंटरफ़ेस की विधि 'तुलना' का उपयोग किया जाता है। ComparTo ऑब्जेक्ट का सामान्य सिंटैक्स नीचे दिया गया है।
सार्वजनिक int तुलना (ऑब्जेक्ट obj)
जैसा कि ऊपर दिखाया गया है, तुलना विधि एक ऑब्जेक्ट को एक तर्क के रूप में स्वीकार करती है (यह कोई भी कस्टम ऑब्जेक्ट हो सकता है) और इसकी तुलना इस पद्धति को लागू करने के लिए उपयोग की गई वर्तमान वस्तु से करता है।
तुलना विधि एक पूर्णांक मान देता है जिसमें निम्न मान हो सकते हैं:
- धनात्मक (> 0) पूर्णांक => वर्तमान वस्तु> वस्तु पैरामीटर पास हुआ।
- ऋणात्मक (वर्तमान वस्तु)
- शून्य (= 0) => वर्तमान वस्तु और निर्दिष्ट वस्तु दोनों समान हैं।
हम SortTo () विधि को सॉर्ट करने के लिए उपयोग कर सकते हैं:
- स्ट्रिंग प्रकार की वस्तुएँ
- आवरण श्रेणी की वस्तुएँ
- उपयोगकर्ता-परिभाषित या कस्टम ऑब्जेक्ट
अब एक तुलनात्मक इंटरफ़ेस का उदाहरण लागू करते हैं।
तुलनात्मक इंटरफ़ेस उदाहरण
निम्नलिखित जावा प्रोग्राम एक व्यक्तिगत वर्ग को लागू करता है जिसमें सदस्य क्षेत्रों के रूप में नाम और आयु शामिल है। यह वर्ग एक 'तुलनात्मक' इंटरफ़ेस को लागू करता है जो हमें वर्ग व्यक्ति की वस्तु को क्रमबद्ध करने की अनुमति देगा।
ध्यान दें कि जैसा कि हम कस्टम ऑब्जेक्ट्स को सॉर्ट करने जा रहे हैं, हमें तुलनात्मक इंटरफ़ेस के o कम्पेरिटो () ’विधि को ओवरराइड करने की आवश्यकता है।
सबसे अच्छा खेल स्टूडियो के लिए काम करने के लिए
ओवरराइड तुलनात्मक () विधि के अंदर, हम उस व्यक्ति ऑब्जेक्ट की आयु की तुलना करते हैं जो कि वर्तमान ऑब्जेक्ट के साथ पारित हो जाता है और तदनुसार मान लौटाता है।
एक उदाहरण जावा प्रोग्राम नीचे दिया गया है।
//class person implementing Comparable interface class Person implements Comparable { private String name; private int age; //Person constructor public Person(String name, int age) { this.name = name; this.age = age; } //getter methods for Person members public int getAge() { return this.age; } public String getName() { return this.name; } //override toString () method @Override public String toString() { return ''; } //Override compareTo () method to compare age of two Person objects @Override public int compareTo(Person per) { if(this.age == per.age) return 0; else return this.age > per.age ? 1 : -1; } } public class Main{ public static void main(String() args) { //declare two objects of Person class Person p1 = new Person('Adrian', 24); Person p2 = new Person('Eddie', 26); int ageDiff = p1.compareTo(p2); //compare ages of two persons declared switch(ageDiff) { case -1: { System.out.println(p2.getName() + ' is older than ' + p1.getName()); break; } case 1: { System.out.println(p1.getName() + ' is older than ' + p2.getName()); break; } default: System.out.println(p1.getName () + ' and ' + p2.getName () + ' are of the same age!'); } } }
आउटपुट:
जैसा कि आउटपुट से देखा जाता है, हम उम्र सदस्य चर के आधार पर व्यक्ति वर्ग की दो वस्तुओं की तुलना करने के लिए एक तुलनीय इंटरफ़ेस का उपयोग करते हैं।
इसलिए जैसा कि नाम से पता चलता है, एक तुलनीय इंटरफ़ेस हमें एक वस्तु की तुलना दूसरे से करने की अनुमति देता है बशर्ते वस्तुएं एक ही प्रकार की हों। जब तक ऑब्जेक्ट्स स्वयं को व्यवस्थित करना जानते हैं, तब तक हम इस इंटरफ़ेस से संबंधित एकमात्र विधि the ComparTo () ’का उपयोग करके आसानी से वस्तुओं को सॉर्ट कर सकते हैं।
जावा स्ट्रिंग तुलना () विधि
जावा में दो स्ट्रिंग प्रकार की वस्तुओं की तुलना करने के लिए हम तुलना () विधि का भी उपयोग कर सकते हैं। स्ट्रिंग ऑब्जेक्ट के प्रत्येक वर्ण को उसके यूनिकोड वर्ण में परिवर्तित करके दो स्ट्रिंग ऑब्जेक्ट की तुलनात्मक रूप से की जाती है।
यदि दो तार बराबर हैं, तो 0 लौटाया जाता है। यदि पहली ऑब्जेक्ट दूसरी ऑब्जेक्ट से अधिक है, तो एक सकारात्मक मान लौटाया जाता है और एक नकारात्मक मान लौटाया जाता है यदि पहली स्ट्रिंग ऑब्जेक्ट दूसरी स्ट्रिंग ऑब्जेक्ट से कम है।
उदाहरण के लिए,
string1.compareTo (string2) string1 और string 2 lexicographically की तुलना करेगा।
public class Main { public static void main(String args()) { //declare and print string objects String str1 = 'SoftwareTestingHelp'; String str2 = 'Java Series tutorial'; String str3 = 'Comparable Interface'; System.out.println('str1:' + str1); System.out.println('str2:' + str2); System.out.println('str3:' + str3); //compare strings and print the results. int retval1 = str1.compareTo( str2 ); System.out.println('
str1 & str2 comparison: '+retval1); int retval2 = str1.compareTo( str3 ); System.out.println('str1 & str3 comparison: '+retval2); int retval3 = str2.compareTo('compareTo method'); System.out.println('str2 & string argument comparison: '+retval3); } }
आउटपुट:
उपरोक्त कार्यक्रम में, हमने देखा कि दो तारों की तुलना करने के लिए ComparTo () विधि का उपयोग कैसे करें। इससे पहले, हमने पूर्णांक मान (उदाहरण के लिए आयु) की तुलना करने के लिए तुलना () विधि का उपयोग किया था। इसी तरह, हम दुसरे डेटा प्रकारों का उपयोग कर सकते हैं जैसे कि तुलना () विधि के साथ डबल्स।
अब जावा में तुलनित्र अंतरफलक पर चलते हैं।
जावा में तुलनित्र इंटरफ़ेस
हमने पहले ही तुलनात्मक इंटरफ़ेस का काम देखा है। तुलनीय इंटरफ़ेस हमें एकल डेटा सदस्य के आधार पर कस्टम ऑब्जेक्ट्स को सॉर्ट करने की अनुमति देता है। लेकिन जब आवश्यकता कई क्षेत्रों या डेटा सदस्यों के आधार पर ऑब्जेक्ट को सॉर्ट करने के लिए उठती है, तो हम एक तुलनित्र इंटरफ़ेस का विकल्प चुन सकते हैं।
तुलनित्र इंटरफ़ेस का उपयोग करके, हम कस्टम ऑब्जेक्ट को सॉर्ट करने के लिए कितने फ़ील्ड का उपयोग करना चाहते हैं, इसके आधार पर हम एक से अधिक तुलनित्र बना सकते हैं। तुलनित्र इंटरफ़ेस का उपयोग करते हुए, मान लें कि हम दो सदस्य फ़ील्ड नाम और आयु पर कस्टम ऑब्जेक्ट को सॉर्ट करना चाहते हैं, तो हमें दो तुलनाकर्ता, एक नाम के लिए और एक आयु के लिए होना चाहिए।
तब हम इन कंप्रेशर्स के साथ कलेक्शंस.सोर्ट () विधि को कॉल कर सकते हैं।
तो हम कंपैरिटर कैसे लिख सकते हैं?
अपने क्षेत्र के रूप में नाम और उम्र के साथ एक कक्षा के छात्र के एक उदाहरण पर विचार करें। विचार करें कि हम छात्र वस्तुओं को नाम और आयु क्षेत्रों पर क्रमबद्ध करना चाहते हैं।
इस उद्देश्य के लिए, हमें सबसे पहले तुलनाकर्ता वर्ग, StudentAgeComparator, और StudenNameComparator लिखना होगा। इन वर्गों में, हम तुलनात्मक इंटरफ़ेस की तुलना () विधि को ओवरराइड करेंगे, और फिर हम इन ऑब्जेक्ट्स में से प्रत्येक का उपयोग करके छात्र ऑब्जेक्ट्स को सॉर्ट करने के लिए कलेक्शंस.सॉर्ट विधि को कॉल करेंगे।
तुलनित्र इंटरफ़ेस में एक interface तुलना ’वस्तु होती है जिसका उपयोग दो भिन्न वर्गों की वस्तुओं की तुलना करने के लिए किया जाता है। तुलना विधि का सामान्य सिंटैक्स है:
सार्वजनिक int तुलना (ऑब्जेक्ट obj1, ऑब्जेक्ट obj2);
तुलना विधि obj1 की तुलना obj2 से करती है।
तुलनित्र इंटरफ़ेस का एक हिस्सा है java.util पैकेज और तुलना विधि के अलावा; इसमें एक अन्य विधि भी शामिल है जिसका नाम बराबर है।
जावा तुलनित्र उदाहरण
आइए जावा में एक कॉम्पैक्टर उदाहरण को लागू करें। फिर से हमने इसके डेटा सदस्यों के रूप में नाम और उम्र के साथ एक छात्र वर्ग लिया है। फिर हम एक तुलनाकर्ता वर्ग AgeComparator को परिभाषित करते हैं जो दो छात्रों की उम्र की तुलना करने के लिए तुलना विधि को ओवरराइड करता है और उचित मान लौटाता है।
मुख्य विधि में, हम छात्र वस्तुओं की एक सरणी का निर्माण करते हैं। तब हम ArrayList और AgeComparator ऑब्जेक्ट के साथ Collections.sort पद्धति को तर्क के रूप में कहते हैं। यह छात्र की वस्तुओं को आयु के अनुसार क्रमबद्ध करता है।
इस परिदृश्य को लागू करने वाला जावा प्रोग्राम नीचे दिया गया है।
import java.util.*; //class student whose objects are to be sorted class Student{ int rollno; String name; int age; Student(int rollno,String name,int age){ this.rollno=rollno; this.name=name; this.age=age; } } //AgeComparator class implementing Comparator to compare objects class AgeComparator implements Comparator { public int compare(Object o1,Object o2){ Student s1=(Student)o1; Student s2=(Student)o2; if(s1.age==s2.age) return 0; else if(s1.age>s2.age) return 1; else return -1; } } class Main{ public static void main(String args()){ //create an ArrayList of Students ArrayList myList=new ArrayList(); myList.add(new Student(101,'Adrian',25)); myList.add(new Student(106,'Sydney',22)); myList.add(new Student(105,'Marcus',27)); //call Collections.sort method with AgeComparator object to sort ArrayList Collections.sort(myList,new AgeComparator()); System.out.println('Sorted Student objects by Age are as follows:'); Iterator iter= myList.iterator(); while(iter.hasNext()){ Student st=(Student) iter.next(); System.out.println(st.rollno+' '+st.name+' '+st.age); } } }
आउटपुट:
उपरोक्त कार्यक्रम में, जिस तरह से हमने एज-कॉम पर आधारित स्टूडेंट ऑब्जेक्ट को सॉर्ट करने के लिए AgeComparator लिखा है, हम नाम फ़ील्ड के आधार पर स्टूडेंट ऑब्जेक्ट को सॉर्ट करने के लिए एक और NameComparator भी लिख सकते हैं।
इस तरह हमारे पास विभिन्न क्षेत्रों में वस्तुओं को क्रमबद्ध करने के लिए आवश्यक के रूप में कई तुलनित्र वर्ग हो सकते हैं। जिस तरह से हमने दो int varables की तुलना की है, हम तुलना विधि का उपयोग करके अन्य डेटा प्रकारों के variables की भी तुलना कर सकते हैं।
तुलनात्मक बनाम तुलनित्र के बीच अंतर
तुलनात्मक इंटरफ़ेस | तुलनित्र इंटरफ़ेस |
---|---|
तत्वों को सॉर्ट करने के लिए Collections.sort (सूची) का उपयोग करता है। | तत्वों को सॉर्ट करने के लिए Collections.sort (सूची, तुलनित्र) का उपयोग करता है। |
तुलनीय इंटरफ़ेस एकल क्षेत्र छँटाई प्रदान करता है। | तुलनित्र इंटरफ़ेस कई क्षेत्रों को छाँटता है। |
तुलनात्मक इंटरफ़ेस प्राकृतिक आदेश के अनुसार ऑब्जेक्ट को सॉर्ट करता है। | तुलनित्र इंटरफ़ेस विभिन्न वस्तुओं की विभिन्न विशेषताओं को क्रमबद्ध करता है। |
एक तुलनीय इंटरफ़ेस का उपयोग करके हम वर्तमान ऑब्जेक्ट की तुलना 'इस' को निर्दिष्ट ऑब्जेक्ट के साथ कर सकते हैं। | एक तुलनित्र इंटरफ़ेस का उपयोग करके, हम विभिन्न वर्गों की वस्तुओं की तुलना कर सकते हैं। |
Java.lang पैकेज का हिस्सा। | Java.util पैकेज का हिस्सा। |
एक तुलनीय इंटरफ़ेस का उपयोग वास्तविक वर्ग को संशोधित करता है। | तुलनित्र मूल वर्ग में परिवर्तन नहीं करता है। |
तत्वों को क्रमबद्ध करने के लिए तुलना () विधि प्रदान करता है। | तत्वों को क्रमबद्ध करने के लिए तुलना () विधि प्रदान करता है। |
बार बार पूछे जाने वाले प्रश्न
Q # 1) तुलनीय एक कार्यात्मक इंटरफ़ेस है?
उत्तर: हाँ, तुलनीय एक कार्यात्मक इंटरफ़ेस है। यह एक एकल सार विधि की तुलना करता है, तुलना ()।
Q # 2) आप एक वर्ग की तुलना कैसे करते हैं?
उत्तर: हम तुलनात्मक इंटरफ़ेस को लागू करके एक वर्ग को तुलनीय बनाते हैं। कक्षा के अंदर, हम ऑब्जेक्ट को सॉर्ट करने के लिए तुलना () विधि को ओवरराइड करते हैं। हम एक ऑब्जेक्ट पास करते हैं और वर्तमान ऑब्जेक्ट के साथ तुलना करते हैं।
विधि तुलना () रिटर्न 0 यदि दो ऑब्जेक्ट समान हैं। यह एक नकारात्मक संख्या देता है यदि पहली वस्तु दूसरी से कम है और सकारात्मक अगर पहली वस्तु दूसरी वस्तु से अधिक है।
Q # 3) तुलनित्र इंटरफेस का मुख्य उद्देश्य क्या है?
उत्तर: तुलनात्मक इंटरफ़ेस मुख्य रूप से कस्टम ऑब्जेक्ट्स को सॉर्ट करने के लिए उपयोग किया जाता है। एक तुलनित्र इंटरफ़ेस का उपयोग विभिन्न वर्गों की वस्तुओं की तुलना करने के लिए भी किया जा सकता है। इसके अलावा, तुलनित्र इंटरफ़ेस का उपयोग कई क्षेत्रों में वस्तुओं को सॉर्ट करने के लिए किया जा सकता है।
क्यू # 4) जावा में तुलनित्र का उपयोग क्यों किया जाता है?
उत्तर: तुलनित्र इंटरफ़ेस का उपयोग मुख्य रूप से तब किया जाता है जब हम कई क्षेत्रों के आधार पर प्राकृतिक ऑर्डरिंग के अलावा अपनी कस्टम वस्तुओं के लिए एक अलग क्रमबद्ध क्रम चाहते हैं।
Q # 5) तुलनात्मक इंटरफ़ेस क्या लागू करता है?
उत्तर: तुलनीय इंटरफ़ेस सभी आवरण वर्गों और स्ट्रिंग वर्ग द्वारा कार्यान्वित किया जाता है। कस्टम ऑब्जेक्ट छँटाई के लिए तुलनीय इंटरफ़ेस का भी उपयोग करते हैं।
निष्कर्ष
इस ट्यूटोरियल में, हमने जावा में तुलनीय और तुलनात्मक इंटरफेस की चर्चा की है। एक तुलनीय इंटरफ़ेस का उपयोग प्राकृतिक क्रम के अनुसार वस्तुओं को क्रमबद्ध करने के लिए किया जाता है और एक समय में वस्तुओं को केवल एक क्षेत्र पर सॉर्ट किया जा सकता है।
तुलनीय इंटरफ़ेस में एक विधि है a तुलनात्मक () ’जिसे तुलनित्र इंटरफ़ेस को लागू करने वाले वर्ग में ओवरराइड करने की आवश्यकता है और जिनकी वस्तुओं को क्रमबद्ध किया जाना है।
तुलनित्र इंटरफ़ेस का उपयोग कस्टम ऑब्जेक्ट्स को सॉर्ट करने के लिए किया जाता है जिन्हें किसी अन्य ऑर्डर के आधार पर सॉर्ट किया जाना है। तुलनित्र इंटरफ़ेस भी हमें कई क्षेत्रों के आधार पर दो अलग-अलग वर्गों की वस्तुओं को सॉर्ट करने की अनुमति देता है।
=> आसान जावा प्रशिक्षण श्रृंखला के माध्यम से पढ़ें।
अनुशंसित पाठ
- उदाहरण के साथ जावा इंटरफेस और एब्सट्रैक्ट क्लास ट्यूटोरियल
- जावा में इंटरफ़ेस सेट करें: उदाहरणों के साथ जावा सेट ट्यूटोरियल
- जावा परिनियोजन: जावा जार फ़ाइल का निर्माण और निष्पादन
- जावा बेसिक्स: जावा सिंटैक्स, जावा क्लास और कोर जावा कॉन्सेप्ट
- जावा वर्चुअल मशीन: जावा एप्लीकेशन चलाने में JVM कैसे मदद करता है
- ListIterator Interface जावा में उदाहरणों के साथ
- जावा में ऑब्जेक्ट्स का एरियर: कैसे बनाएं, आरंभ और उपयोग करें
- जावा ट्यूटोरियल फॉर बिगिनर्स: 100+ हैंड्स-ऑन जावा वीडियो ट्यूटोरियल