में दिनांक चर के सेट का सबसे हालिया सेट कैसे प्राप्त करें मेरे पास अलग-अलग परिवर्तनीय नामों के साथ लगभग 8 दिनांक चर (java.util.Date) हैं। इन तिथियों में से सबसे हालिया (अधिकतम) चुनने का सबसे कुशल/सर्वोत्तम तरीका क्या है?जावा
जावा
उत्तर
उन्हें एक संग्रह में स्टोर - यह वैसे भी अपने कार्यक्रम डिजाइन के मामले में समझ बनाने सकता है: भी किसी भी Comparable
के लिए काम करते हैं। यदि आपके पास उदा। एक सूची वस्तु, आप कर सकते हैं:
Collections.max(dates);
Date
तुलनीय है, इसलिए उन सब को एक सूची में जोड़ने, और Collections.max()
का उपयोग सबसे बड़ी (नवीनतम) तिथि को खोजने के लिए:
List<Date> dates = new ArrayList<Date>();
dates.add(foo);
dates.add(bar);
... etc
Date latest = Collections.max(list);
वास्तव में, यदि आप कल्पना प्राप्त करना चाहता था, तो आप ऐसा कर सकते हैं:
public static <T extends Comparable<T>> T max(T... items) {
return Collections.max(Arrays.asList(items));
}
और इस तरह इसे कहते:
Date latest = MyClass.max(foo, bar, fred);
लेकिन यह होगा , आदर्श रूप में
Integer biggest = MyClass.max(3, 7, 4, 1);
यह ओ (एन लॉग एन) है, जबकि संग्रह। मैक्स ओ (एन) है। – Richante
उन्हें एक सूची में रखो और Collections.max
का उपयोग करें।
protected Date getMostRecentDate(Date ... dates) {
Arrays.sort(dates);
return myDateArray[dates.length - 1];
}
तो फिर तुम यह इतना की तरह फोन चाहते हैं:
जब से तुम अलग चर में अपने सभी तिथियों भंडारण कर रहे हैं, तो आपको निम्न varargs समारोह की तरह कुछ करते हैं और इसे करने के लिए बंद अपने सभी चर पारित करने के लिए की जरूरत है :
Date mostRecent = getMostRecentDate(date1, date2, date3 /* etc.*/);
यह कुशल नहीं है क्योंकि वह केवल अधिकतम एक बार प्राप्त करना चाहता है। सॉर्टिंग ओ (एन * लॉगएन) लेता है जबकि एक अधिकतम अधिकतम ऑपरेशन ओ (एन) होता है। – Tudor
@ ट्यूडर यकीन है, हालांकि सभी निष्पक्षता में, छोटे एन के साथ (और मुझे लगता है कि उसे छोटा एन बी/सी मिल गया है अन्यथा विभिन्न क्षेत्रों का पूरा समूह बनाए रखना बहुत काम होगा), ऐसा नहीं होने वाला है बहुत अंतर – stevevls
उन सब को एक संग्रह में जोड़े और फिर इसे सॉर्ट, या उन्हें एक संग्रह है कि पहली जगह में आदेश दिया है, इस तरह के PriorityQueue के रूप में जोड़ने के लिए:
PriorityQueue<Date> dateQ = new PriorityQueue<Date>();
dateQ.add(someDate);
dateQ.add(anotherDate);
dateQ.add(thirdDate); // etc...
System.out.println("Max date is: " + dateQ.peek());
इसकी कार्यक्षमता नियमित संग्रह के साथ कार्यान्वयन की तुलना कैसे करती है? – user6123723
अच्छा सवाल। यह ओ (एन लॉग एन) होना चाहिए, इसे एक सूची में जोड़ने और फिर सॉर्ट करना चाहिए। हालांकि, Collections.max (जैसा कि कई अन्य उत्तरों में संदर्भित है) ओ (एन) है, इसलिए यह मेरे उत्तर से निश्चित रूप से अधिक कुशल है। – mongiesama
कई बार या सिर्फ एक बार? – Tudor
बस एक बार। सभी दिनांक परिवर्तनीय मान अलग हो सकते हैं। मैं बस एक जेएसपी पेज पर प्रदर्शित करने के लिए सबसे हाल की तारीख को कुशलतापूर्वक खोजने की कोशिश कर रहा हूं। – user6123723
क्या हाल ही में सबसे हालिया तारीख है या आपको भविष्य की तिथियों के लिए खाते की आवश्यकता है? – eabraham