प्रगति पट्टी को अद्यतन करते समय संग्रह को सॉर्ट करने का सबसे अच्छा तरीका क्या है? वर्तमान में मैं इस तरह कोड है:प्रगति दिखाते समय एक बड़े संग्रह को क्रमबद्ध करें
for (int i = 0; i < items.size(); i++)
{
progressBar.setValue(i);
// Uses Collections.binarySearch:
CollectionUtils.insertInOrder(sortedItems, item.get(i));
}
इस प्रगति से पता चलता है, लेकिन प्रगति बार में sortedItems
बड़ा बढ़ता है मदों की संख्या के रूप में धीमा। क्या किसी के पास बेहतर दृष्टिकोण है? आदर्श रूप में मैं Collections.sort()
के समान इंटरफ़ेस का उपयोग करना चाहता हूं ताकि मैं अलग-अलग सॉर्टिंग एल्गोरिदम का प्रयास करूं।
कोई भी मदद महान होगी!
पृष्ठभूमि का एक सा है, यह कोड Lucene से दस्तावेजों (1-10 मिलियन) के बहुत सारे वापस खींच और उन पर एक कस्टम तुलनित्र चल रहा है। डेटा पर वापस डेटा लिखकर उन्हें सॉर्ट करना व्यावहारिक होने के लिए बहुत धीमा होगा। अधिकांश लागत डिस्क से आइटम को पढ़ रही है और फिर वस्तुओं पर तुलनित्र चल रही है। मेरे पीसी में मेमोरी का भार है इसलिए डिस्क पर स्वैपिंग से संबंधित कोई समस्या नहीं है।
अंत में मैं स्टीफन के समाधान के साथ गया क्योंकि यह बहुत साफ था और मुझे आसानी से एक बहु थ्रेडेड सॉर्टिंग एल्गोरिदम जोड़ने की अनुमति दी गई।
क्या आपकी प्रगति पट्टी में कुछ निश्चित अधिकतम मूल्य है? क्योंकि 9 000 लंबाई सरणी का 30% बहुत अलग है जो 90 लंबाई सरणी का 30% है। – nearlymonolith
@ एंथनी प्रगति पट्टी के लिए अधिकतम मूल्य 'item.size()' है। मैं आमतौर पर लाखों या लाखों लोगों को सॉर्ट कर रहा हूं। –
मैं स्मृति में लाखों वस्तुओं को क्रमबद्ध करने का चयन नहीं करना चाहूंगा। मैं उन्हें डिस्क फ़ाइल में लिखने की अधिक संभावना रखता हूं और एक ऑपरेटिंग सिस्टम सॉर्ट करता हूं। –