"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > जावा की प्रायोरिटीक्यू `टूस्ट्रिंग` विधि तुलनित्र द्वारा परिभाषित तत्व क्रम को प्रतिबिंबित क्यों नहीं करती है?

जावा की प्रायोरिटीक्यू `टूस्ट्रिंग` विधि तुलनित्र द्वारा परिभाषित तत्व क्रम को प्रतिबिंबित क्यों नहीं करती है?

2024-11-09 को प्रकाशित
ब्राउज़ करें:154

Why does Java\'s PriorityQueue `toString` method not reflect the element order defined by the Comparator?

PriorityQueue की toString विधि तत्व क्रम व्याख्या को कैसे गुमराह करती है

जावा में, प्राथमिकताQueue डेटा संरचना तत्वों को उनके निर्दिष्ट आधार पर प्राथमिकता देने के लिए एक बाइनरी ढेर बनाए रखती है तुलना रणनीति. यह रणनीति आम तौर पर एक कस्टम तुलनित्र के माध्यम से कार्यान्वित की जाती है, जैसा कि दिए गए कोड स्निपेट में देखा गया है। हालाँकि, प्रायोरिटीक्यू की टूस्ट्रिंग विधि के आउटपुट की जांच करते समय तत्व क्रम के बारे में एक आम गलतफहमी है।

टूस्ट्रिंग विधि को प्रायोरिटीक्यू की सामग्री का पाठ्य प्रतिनिधित्व प्रदान करने के लिए डिज़ाइन किया गया है। हालाँकि, यह तुलनित्र द्वारा परिभाषित प्राथमिकता क्रम को परोक्ष रूप से लागू नहीं करता है। इसके बजाय, यह केवल ढेर के भीतर तत्वों को उनकी वर्तमान स्थिति में प्रदर्शित करता है, जो अपेक्षित क्रमबद्ध क्रम के साथ संरेखित नहीं हो सकता है।

दिए गए उदाहरण में, प्राथमिकता क्यू को आवृत्ति मानों को प्राथमिकता देने के लिए एक कस्टम तुलनित्र के साथ प्रारंभ किया गया है। आपने आउटपुट को इस क्रम को प्रतिबिंबित करने का इरादा किया था, पहले सूचीबद्ध कम आवृत्तियों वाले तत्वों के साथ। हालाँकि, toString विधि का आउटपुट एक गलत क्रम दिखाता है, जो स्पष्ट रूप से इच्छित प्राथमिकता का खंडन करता है।

इस विसंगति का कारण बाइनरी हीप की आंतरिक संरचना से उत्पन्न होता है। हालाँकि यह आंशिक क्रम बनाए रखता है, लेकिन तत्वों को तब तक पूरी तरह से क्रमबद्ध नहीं किया जाता है जब तक कि उन्हें ढेर से हटा नहीं दिया जाता है। ToString विधि इस सॉर्टिंग को निष्पादित किए बिना तत्वों को सीधे ढेर से पुनर्प्राप्त करती है, जिससे देखे गए आउटपुट की ओर अग्रसर होता है।

इस समस्या को हल करने और सही क्रमबद्ध क्रम प्राप्त करने के लिए, प्राथमिकता क्यू से तत्वों को एक-एक करके निकालना आवश्यक है एक। पोल() विधि यह करती है, ढेर से एक तत्व को हटाकर उसे वापस कर देती है। पोल() का उपयोग करके प्राथमिकता क्यू के माध्यम से पुनरावृत्त करके और लौटाए गए तत्वों को प्रिंट करके, आप इच्छानुसार क्रमबद्ध क्रम प्राप्त कर सकते हैं।

इसलिए, क्रमबद्ध क्रम में तत्वों को मुद्रित करने के लिए सही कोड होगा:

while (!queue.isEmpty()) {
   System.out.println(queue.poll());
}

यह तत्वों को उनकी आवृत्तियों के आरोही क्रम में प्रिंट करेगा, जैसा कि तुलनित्र द्वारा परिभाषित किया गया है।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3