Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Java

जावा में TreeMap का उपयोग करके उपयोगकर्ता-परिभाषित ऑब्जेक्ट्स को सॉर्ट करना

उदाहरण

import java.io.*; 
import java.util.*; 

public class Demo { 
    static void sortObjects(String myData) { 
        String[] myVals = myData.split(" "); 
        Map> myMap = new TreeMap<>(); 
        
        for (int i = 1; i < myVals.length; i += 2) { 
            int myAge = Integer.parseInt(myVals[i]); 
            String name = myVals[i - 1]; 
            
            if (myMap.containsKey(myAge)) { 
                ArrayList myList = myMap.get(myAge); 
                myList.add(name); 
                Collections.sort(myList); 
                myMap.remove(myAge); 
                myMap.put(myAge, myList); 
            } else { 
                ArrayList myList = new ArrayList<>(); 
                myList.add(name); 
                myMap.put(myAge, myList); 
            } 
        } 
        
        for (Map.Entry> entry : myMap.entrySet()) { 
            ArrayList al1 = entry.getValue(); 
            for (int i = 0; i < al1.size(); i++) 
                System.out.print(al1.get(i) + " " + entry.getKey() + " "); 
        } 
    } 
    
    public static void main(String args[]) { 
        String myObj = "Joe 36 Hannah 24 Jill 13 Jack 1 Preet 8 Deep 45"; 
        System.out.println("सॉर्टिंग के बाद ऑब्जेक्ट्स हैं: "); 
        sortObjects(myObj); 
    } 
}

आउटपुट

सॉर्टिंग के बाद ऑब्जेक्ट्स हैं: Jack 1 Preet 8 Jill 13 Hannah 24 Joe 36 Deep 45

व्याख्या: Demo क्लास में 'sortObjects' नामक एक फंक्शन होता है जो एक हैशमैप बनाता है जो इंटीजर और ऐरे लिस्ट को मैप करता है। यह मानों के माध्यम से पुनरावृति करता है, और जांचता है कि कौन सा स्ट्रिंग है और कौन सा इंटीजर तत्व है और इन्हें इंटीजर मानों के आधार पर सॉर्ट किया जाता है। मुख्य फंक्शन में, स्ट्रिंग ऑब्जेक्ट बनाया जाता है और इस स्ट्रिंग ऑब्जेक्ट पर फंक्शन को कॉल किया जाता है और प्रासंगिक संदेश कंसोल पर प्रदर्शित होता है।

TreeMap विशेषताएं:

  • Red-Black ट्री पर आधारित NavigableMap कार्यान्वयन
  • कुंजियों को उनके नैचुरल ऑर्डरिंग या Comparator के अनुसार सॉर्ट करता है
  • containsKey, get, put, remove: O(log n) समय जटिलता
  • Null कुंजी अनुमत नहीं (NullPointerException फेंकता है)

सही तरीका: Comparable/Comparator के साथ:

class Person implements Comparable {
    String name;
    int age;
    
    Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    @Override
    public int compareTo(Person other) {
        return Integer.compare(this.age, other.age);
    }
    
    @Override
    public String toString() {
        return name + " " + age;
    }
}

// उपयोग:
TreeMap> map = new TreeMap<>();
// या सिंपल लिस्ट सॉर्टिंग:
List people = Arrays.asList(
    new Person("Joe", 36), new Person("Hannah", 24),
    new Person("Jill", 13), new Person("Jack", 1)
);
people.sort(Comparator.comparing(Person::getAge));
// या
people.sort(Comparator.comparing(Person::getAge).thenComparing(Person::getName));

TreeMap vs HashMap vs LinkedHashMap:

विशेषताHashMapLinkedHashMapTreeMap
क्रमकोई गारंटी नहींइंसर्शन क्रमसॉर्टेड (कुंजी)
Null कुंजी1 अनुमत1 अनुमतअनुमत नहीं
समय जटिलताO(1)O(1)O(log n)
कार्यान्वयनहैश टेबलहैश टेबल + लिंक्ड लिस्टरेड-ब्लैक ट्री
  1. - Java का उपयोग करके स्ट्रिंग में यूनिक कैरेक्टर कैसे खोजें?

    आप निम्नलिखित तरीकों से पता लगा सकते हैं कि दी गई स्ट्रिंग में निर्दिष्ट कैरेक्टर मौजूद है या नहीं: indexOf() विधि का उपयोग करके आप String क्लास की indexOf() विधि का उपयोग करके स्ट्रिंग में किसी विशेष अक्षर को खोज सकते हैं। यह विधि एक इंटीजर पैरामीटर लौटाती है जो स्ट्रिंग के भीतर शब्द की पोजीशन इं

  1. - Java में Gson का उपयोग करके कस्टम इंस्टेंस क्रिएटर कैसे बनाएं?

    JSON स्ट्रिंग को Java ऑब्जेक्ट से या उससे पार्स करते समय, डिफ़ॉल्ट रूप से Gson डिफ़ॉल्ट कंस्ट्रक्टर को कॉल करके Java क्लास का इंस्टेंस बनाने का प्रयास करता है। यदि Java क्लास में डिफ़ॉल्ट कंस्ट्रक्टर नहीं है या हम Java ऑब्जेक्ट्स बनाते समय कुछ प्रारंभिक कॉन्फ़िगरेशन करना चाहते हैं, तो हमें अपना खुद

  1. - जावा में प्रीडिफाइंड मेथड्स के बिना स्ट्रिंग को कैसे सॉर्ट करें?

    एक String एक ऑब्जेक्ट है जो कैरेक्टर्स के इम्यूटेबल अनुक्रम को दर्शाता है और एक बार बनने के बाद इसे बदला नहीं जा सकता। java.lang.String क्लास का उपयोग स्ट्रिंग ऑब्जेक्ट बनाने के लिए किया जा सकता है। नीचे दिए गए प्रोग्राम में, हम जावा में String क्लास के किसी भी प्रीडिफाइंड मेथड्स का उपयोग किए बिना