2013-02-06 15 views
6

यह मूर्खतापूर्ण लग सकता है, लेकिन जब आपके पास (कुंजी, मान) जोड़ी का ऑब्जेक्ट होता है तो यह समझ में आता है और आप उन्हें चाबियों के अनुसार क्रमबद्ध करते हैं। कोड के साथ मेरी बात को वर्णन करने के लिए:जावा में प्राथमिकता Queue कैसे डुप्लिकेट प्रविष्टियों की तरह है?

public class Pair implements Comparable<Pair> { 
    private int value; 
    private int key; 

    public Pair(int key, int value) { 
     this.key = key; 
     this.value = value; 
    } 

    @Override 
    public int compareTo(Pair o) { 
     if (this.key > o.key) 
      return 1; 
     else if (this.key < o.key) 
      return -1; 
     return 0; 
    } 
} 

public class program { 
    public static void main(String[] args) { 
     PriorityQueue<Pair> queue = new PriorityQueue<Pair>; 
     queue.add(new Pair(1,1)); 
     queue.add(new Pair(1,2)); 
     queue.add(new Pair(1,3)); 

     Pair pair = queue.poll(); // What would be in pair? 
    } 
} 

pair में क्या होगा? पहला या अंतिम जोड़ा तत्व? या उनमें से कोई भी फैसला करने की संभावना के बिना?

उत्तर

7

PriorityQueue एपीआई इस स्थिति के लिए कोई वादा करता है:

इस कतार के सिर निर्दिष्ट आदेश के संबंध में कम से कम तत्व है। यदि एकाधिक तत्व कम से कम मूल्य के लिए बंधे हैं, तो सिर उन तत्वों में से एक है - संबंधों को मनमाने ढंग से तोड़ दिया जाता है। कतार पुनर्प्राप्ति संचालन चुनाव, निकालें, peek, और तत्व कतार के सिर पर तत्व का उपयोग करें।

लेकिन परीक्षण करना आसान है। toString जोड़ी को

@Override 
public String toString() { 
    return key + " " + value; 
} 

जोड़ें और चुनाव परिणाम मुद्रित

Pair pair = queue.poll(); // What would be in pair? 
    System.out.println(pair); 

यह प्रिंट

1 1 
+1

+1। –

+1

तो अगर मैं इसे सही ढंग से समझता हूं - मैं बस इस बात पर भरोसा नहीं कर सकता कि मुझे पहले क्या मूल्य मिलेगा? क्योंकि आउटपुट से यह वास्तव में ऐसा लगता है कि यह "फीफो" व्यवहार है। – Petr

+1

एपीआई के मुताबिक आप नहीं कर सकते, लेकिन मेरे परीक्षण भी एक ही Pair.key के लिए फीफो-जैसे व्यवहार दिखाते हैं। –

-3

असल में Queue पहले सबसे पहले डेटा संरचना है।

PriorityQueuecomparable -ity आदेश को परिभाषित करता है।

सभी Pair() की आपकी प्राथमिकता के समान ही हैं। इसलिए क्रम में कोई बदलाव नहीं है।

प्रथम-इन-फर्स्ट-आउट के रूप में प्रति documentation

कतार पुनर्प्राप्ति संचालन चुनाव यानी Pairs (1,1) (1,2) (1,3)

, कतार के सिर पर, हटाने झांकना, और तत्व पहुंच तत्व ।

+0

बेहतर एक टिप्पणी downvote द्वारा पीछा किया जाता, मैं देख कोई गलत – TheWhiteRabbit

+3

जवाब है हो जाएगा गलत। आदेश अनिश्चित है। एकमात्र सही उत्तर के लिए – EJP

संबंधित मुद्दे