Free tutorials & notes in Hindi & English · Clean code examples 🧰 मुफ़्त PDF और फ़ोटो टूल्स →
📘 Lesson  ·  Lesson 42

Comparable vs Comparator

अपने objects sort करना

Java numbers और strings खुद sort कर सकती है, पर अपने objects (जैसे Students) sort करने को उसे order पता होना चाहिए। दो tools यह करते हैं: Comparable (एक built-in natural order) और Comparator (कई custom orders)। साथ में ये sorting पर पूरा नियंत्रण देते हैं।

💡 Comparable = class के अंदर एक default order। Comparator = उसके बाहर अतिरिक्त custom orders।

Comparable — natural order

class Student implements Comparable<Student> {
    String name; int marks;
    Student(String n, int m) { name = n; marks = m; }
    public int compareTo(Student other) {
        return this.marks - other.marks;   // marks से sort
    }
}
// इस्तेमाल:
Collections.sort(studentList);   // compareTo इस्तेमाल करता है

Comparable और उसकी compareTo implement करना class को एक natural order देता है। Collections.sort फिर उससे list sort करता है। यहाँ students marks से, कम से ज़्यादा sort होते हैं।

Comparator — custom orders

import java.util.Comparator;

Comparator<Student> byName = new Comparator<>() {
    public int compare(Student a, Student b) {
        return a.name.compareTo(b.name);   // name से sort
    }
};
Collections.sort(studentList, byName);

Comparator class के बाहर एक sort order define करता है, अपनी compare method से। आप इसे sort को भेजते हैं। यह आपको एक ही objects अलग तरीक़ों से sort करने देता है।

कई sort orders

Comparator का बड़ा फ़ायदा एक ही class को कई orders होना है:

  • Students को marks से sort (Comparable का natural order)।
  • Name से sort (एक Comparator)।
  • Marks descending से sort (एक और Comparator)।

Comparable इकलौता default देता है; Comparators जितने चाहिए उतने विकल्प देते हैं।

Lambda के साथ Comparator

// छोटा lambda रूप:
studentList.sort((a, b) -> a.marks - b.marks);

// helper से और साफ़:
studentList.sort(Comparator.comparing(s -> s.name));

चूँकि Comparator की इकलौती method है, आप इसे छोटे lambda के रूप में लिख सकते हैं। Comparator.comparing(...) sort करने वाला field नाम देकर इसे और साफ़ बनाता है।

Comparable बनाम Comparator

बातComparableComparator
MethodcompareTocompare
कहाँClass के अंदरClass के बाहर
Ordersएक (natural)कई custom
Sort callCollections.sort(list)sort(list, comparator)

आम गलतियाँ

  • गलत compareTo return। negative/zero/positive लौटाइए, true/false नहीं।
  • घटाव से integer overflow। बहुत बड़े ints को Integer.compare(a, b) बेहतर।
  • Comparable से कई orders की उम्मीद। यह एक देता है — ज़्यादा को Comparators इस्तेमाल कीजिए।
  • Interface implement न करना। Objects sort करने को Comparable या Comparator चाहिए।

सारांश

  • Custom objects sort करने को Comparable या Comparator चाहिए।
  • Comparable compareTo से एक natural order define करता है।
  • Comparator compare से custom orders define करता है, class के बाहर।
  • कई sort orders को Comparators इस्तेमाल कीजिए।
  • Comparators छोटे lambdas के रूप में लिखे जा सकते हैं।

आगे, data sorted रखिए TreeSet से, या compact logic लिखिए lambda expressions से।

अक्सर पूछे जाने वाले प्रश्न (FAQ)

Comparable और Comparator में क्या अंतर है?
Comparable class के अंदर ही एक natural sort order define करता है (compareTo से)। Comparator class के बाहर sorting define करता है (compare से), और आप अलग orders को कई अलग Comparators बना सकते हैं। Comparable default है; Comparator लचीलापन जोड़ता है।
compareTo method क्या है?
compareTo Comparable interface की इकलौती method है। यह negative number, zero, या positive number लौटाती है यह बताने को कि यह object दूसरे से छोटा, बराबर, या बड़ा है — जो sort को order बताता है।
Comparable के बजाय Comparator कब इस्तेमाल करूँ?
Comparator तब जब आपको एक से ज़्यादा sort order चाहिए (जैसे students को name और marks दोनों से sort), या जब आप Comparable जोड़ने को class बदल न सकें। Comparator sorting logic अलग रखता है।
Java में objects की list कैसे sort करूँ?
अगर class Comparable implement करती है, Collections.sort(list) call कीजिए। Custom order को Comparator भेजिए: Collections.sort(list, comparator) या list.sort(comparator)।
क्या Comparator को lambda के रूप में लिख सकता हूँ?
हाँ। चूँकि Comparator की इकलौती method है, आप इसे lambda के रूप में लिख सकते हैं, जैसे (a, b) -> a.marks - b.marks, या साफ़, छोटे sorting code को Comparator.comparing(...) जैसे helpers इस्तेमाल कीजिए।
← Back to Java Tutorial
🔗

Share this topic with a friend

यह topic किसी दोस्त को भेजें

Found it useful? Send it to a classmate learning the same thing.

अच्छा लगा? जो दोस्त यही सीख रहा है, उसे भेज दीजिए।

💻 लाइव कोड एडिटर

इस पेज के प्रोग्राम यहीं तैयार हैं — चलाएँ, बदलें और सीखें। कुछ भी इंस्टॉल किए बिना।
OneCompiler द्वारा संचालित। कोड एडिटर में अपने आप आ जाता है — Run दबाकर आउटपुट देखें। अगर एडिटर न खुले तो नए टैब में खोलें.
अगला topicJava 8 Features आपकी प्रगति: 42 / 61 (69%) · Lesson 43 / 61 आगे बढ़ें →

यह lesson कैसा लगा?

आपकी राय से हम content और बेहतर बनाते हैं।

अपना review और सुझाव लिखें (वैकल्पिक)

Review approve होने के बाद आपका नाम और शहर इसके साथ public दिख सकते हैं। Email या phone न लिखें।

▶ CodingEasily on YouTube

Video से सीखें – आसान Hindi में

चुनी हुई video: RDBMS भाग 3 – Class XI Commerce IT

▶ Channel subscribe करें