2012-12-07 10 views
8

मेरे पास एक जावा असाइनमेंट है जिसमें प्राथमिकता कतार को फिर से शामिल किया गया है। कतार में एक स्ट्रिंग और उनमें से एक int के साथ ऑब्जेक्ट होते हैं और मुझे कतार में सभी ऑब्जेक्ट्स के विरुद्ध एक अलग ऑब्जेक्ट की स्ट्रिंग को देखने का तरीका होता है।मुझे प्राथमिकता कतार को सही तरीके से कैसे शुरू किया जाना चाहिए?

क्या यह एक इटरेटर ऑब्जेक्ट करने का सबसे अच्छा तरीका होगा? यह बहुत गन्दा लगता है। मैं dequeue और enqueue सकता है लेकिन यह अक्षम लगता है। शायद एक foreach पाश?

उत्तर

9

हां, यदि आपको संग्रह में प्रत्येक तत्व की जांच करने की आवश्यकता है, तो iterator या for each शायद सबसे अच्छा है।

Iterator<E> iter = myPriorityQueue.iterator(); 
while (iter.hasNext()) { 
    current = iter.next(); 
    // do something with current 
} 

या

for (Element e : myQueue) { 
     // do something with e 
} 
1

आप आदेश देने के बारे में परवाह नहीं है (उस मामले में - तुम क्यों PriorityQueue साथ काम कर रहे), इटरेटर का उपयोग करें। आप प्राथमिकता के आधार पर पुनरावृति करना चाहते हैं, तो Javadoc से सलाह देखें: आप का आदेश दिया ट्रेवर्सल जरूरत

हैं, तो Arrays.sort उपयोग करने पर विचार (pq.toArray())।

+1

वास्तव में, यह एक ढेर जो अपने आप में पूर्ण आदेश को प्रतिबंधित करता है पर आधारित है। इस प्रकार आपको मतदान को कॉल करना चाहिए, क्योंकि इससे ढेर को न्यूनतम/अधिकतम तक रूट करने का कारण बन जाएगा। लेकिन उसकी आवश्यकता के लिए, आदेश कोई फर्क नहीं पड़ता, इसलिए वह प्रत्येक पाश के लिए एक बार फिर से कर सकता है। –

+0

आईएम ने कहा कि मुझे प्राथमिकता कतार का उपयोग करना है। इससे कोई फर्क नहीं पड़ता कि मैं किस क्रम को पार करता हूं। मुझे यह सुनिश्चित करने के लिए बस प्रत्येक ऑब्जेक्ट स्ट्रिंग को जांचना होगा कि यह मेरे अलग ऑब्जेक्ट की स्ट्रिंग से मेल नहीं खाता है – Anon

2

एक छोटा सा विस्तार: वहाँ कोई मौका अपने कतार पाश के दौरान संशोधित किया जा सकता है, तो दोनों iterator और for each एक ConcurrentModificationException कारण होगा अगर; इस बात की संभावना कतार प्रसंस्करण के दौरान संशोधित हो जाएगी है, तो आप poll() इस्तेमाल कर सकते हैं:

Resource resource; 
    while ((resource = resourceQueue.poll()) != null) { 
     this.processIncludes(resourceQueue, resource); 
    } 
संबंधित मुद्दे