जावा सॉर्टिंग ArrayList <Integer>

खैर, मैं कुछ बहुत ही सरल पर स्टॉक हूं लेकिन मैं इसे समझ नहीं सकता।

सबसे पहले, मुझे पता है कि Collection.sort() विधि है, लेकिन मेरा ऐरेलिस्ट मुख्य ऑब्जेक्ट में डेटा के लिंक के प्रकार है, और इस ऑब्जेक्ट के डेटा के अनुसार मेरी सॉर्टिंग की आवश्यकता है।

Like this is a sport competition and ArrayList numbers is keeping numbers of participants that has passed a checkpoint.

और मुझे इस ArrayList को सर्वोत्तम समय से न्यूनतम से अधिकतम समय तक क्रमबद्ध करने की आवश्यकता है ताकि उन्हें पहले स्थान पर, दूसरे आदि पर सेट किया जा सके।

इसके लिए मुझे अपने प्रतिस्पर्धात्मक वस्तु से पूछना चाहिए:

    public ArrayList sort (ArrayList numbers)
    for (int i=0;i sortedArray
 where all this will be sorted by this time parameter from minimal to maximum*/
    return sortedArray;
    }

यह वास्तविक कोड नहीं है, लेकिन आपको विचार मिल गया है। मैं प्रतीत होता है आसान समाधान खोजने की कोशिश के साथ अटक गया। कृपया सहायता कीजिए

0

4 उत्तर

It seems awkward to sort an ArrayList based on other things that have nothing directly to do with what you actually want to sort on -- the times.

I would design it differently. It looks you have some kind of object defined on which you can call getTimeOfLastCheckPoint(). For now, I'm assuming it's called Participant. Instead of maintaining an ArrayList to store index-based references to your participants, I would maintain an ArrayList.

Then I would create a class that implements Comparator (perhaps ParticipantComparator) (Comparator javadocs) that knows how to compare Participants based on the results of the call to getTimeOfLastCheckPoint(). Then sorting is simply Collections.sort(participantsArrayList, new ParticipantComparator());.

3
जोड़ा
यह ArrayList मैं अपने कस्टम सूची एडाप्टर को देता हूं जो इस संख्या से बहुत सारे डेटा निकालता है। जैसे कि मैं ऐरेलेस्टिस्ट <�इंटीजर> संख्या एडाप्टर को पास करता हूं और यह इस नंबर के तहत सूची प्रतिभागी के नाम पर सेट करता है, उसका नाम, टीम इत्यादि। मूल वस्तु मेरे पास प्रतिस्पर्धा है, इसमें प्रतिभागियों की 150 वस्तुओं के उदाहरण के लिए एक सूची है समय के बारे में, और इतने पर stiored है। इसलिए मैं एडाप्टर को डेटा का बहुत पास नहीं करता हूं, केवल मेरे ऐरेलिस्ट <�इंटीजर> में उनसे लिंक करता हूं
जोड़ा लेखक Vlad Alexeev, स्रोत

एक java.util.Comparator लिखें जो आपके प्रतिभागियों-अनुक्रमणिका में इंडेक्स के रूप में उपयोग करके Integer की तुलना करता है:

public class ParticipantIndexComparator implements Comparator {
    final List participants;
    public ParticipantIndexComparator(List participants) {
        this.participants = participants;
    }

    @Override
    public int compare(Integer i1, Integer i2) {
        long l1 = participants.get(i1).getTimeOfLastCheckPoint();
        long l2 = participants.get(i2).getTimeOfLastCheckPoint();
        return Long.compare(l1, l2);
    }
}

अब आप अपने पूर्णांक को सॉर्ट करने के लिए इस तुलनित्र का उपयोग कर सकते हैं:

Collections.sort(numbers, new ParticipantIndexComparator(participants));

लेकिन ऐसा करने से पहले, खुद से पूछें कि आपकी सूची में Integer -objects क्यों हैं जो प्रतिभागी के बजाय प्रतिभागियों-सूची में सूचकांक हैं!

3
जोड़ा

मेरे लिए, यह आधे से किए गए SQL क्वेरी के लिए वर्कअराउंड समाधान की तरह लगता है। यदि आपका डेटा डेटा बेस में रहता है (और मुझे पूरा यकीन है कि यह मामला है), तो अपने SQL- क्वेरी को संशोधित करें ताकि आपको एप्लिकेशन स्तर पर उस सॉर्टिंग डेटा को करने की आवश्यकता न हो। यह कम से कम दो कारणों से अच्छा है:

  1. Simplyfiy एप्लिकेशन तर्क
  2. निष्पादन को गति दें (डेटा बेस इस तरह के सॉर्टिंग को बहुत तेज कर सकता है)
2
जोड़ा

आप तुलनात्मक अपनी दौड़ अवधि के अनुसार सूची को सॉर्ट करने के लिए और जावा में प्रत्येक लूप के लिए भी उपयोग करें।

0
जोड़ा