मैं अपने कार्यक्रम के किसी अन्य भाग में उपयोग के लिए जावा की प्राथमिकता क्यूई कक्षा को क्लोजर में लपेटना चाहता हूं। जो मैं समझने की कोशिश कर रहा हूं वह यह है कि अगर यह एक अजीब तरीके से ऐसा करने का कोई तरीका है और प्राथमिकता कतार अपरिवर्तनीय बनाते हैं। क्या ऐसा करने के कोई अच्छे तरीके हैं, या क्या मैं प्राथमिकता क्यूयू को एक परिवर्तनीय डेटा संरचना के रूप में उपयोग करने के लिए बेहतर होने जा रहा हूं?क्लोजर में जावा क्लास अपरिवर्तनीय कैसे बना सकता हूं?
उत्तर
मुझे नहीं लगता कि एक परिवर्तनीय डेटा संरचना को एक अपरिवर्तनीय के रूप में लपेटने का एक आसान तरीका है। अपरिवर्तनीय डेटा संरचनाएं तब प्रभावी हो जाती हैं जब नया संस्करण पुराने संस्करण के साथ चालाक तरीके से डेटा साझा कर सकता है, और मैं वास्तव में यह नहीं देख सकता कि यह PriorityQueue
के आंतरिक भाग तक पहुंच के बिना कैसे किया जा सकता है।
यदि आप वास्तव में एक लगातार प्राथमिकता कतार this thread दिलचस्प हो सकते हैं। ऐसा लगता है कि हालांकि रैखिक-समय सम्मिलित हैं, इसलिए यदि यह एक मुद्दा है तो आपको एक और कार्यान्वयन की तलाश करनी होगी।
संपादित करें: दूसरे विचार पर, एक सतत प्राथमिकता कतार का एक सरल कार्यान्वयन सिर्फ एक क्रमबद्ध सेट में (prio, value) -pairs को स्टोर करना है। कुछ इस तरह:
(defn make-pqueue []
(sorted-set))
(defn pqueue-add [pq x prio]
(conj pq [prio x]))
(defn pqueue-peek [pq]
(first pq))
(defn pqueue-pop [pq]
(let [top (first pq)]
(disj pq top)))
बेशक
, ऊपर कोड सुंदर (, कोई कई प्रविष्टियाँ उदाहरण के लिए) सीमित है, लेकिन यह विचार को दिखाता है।
आप स्वचालित रूप से उत्परिवर्तनीय वर्ग को अपरिवर्तनीय नहीं बना सकते हैं। कोई हमेशा जावा क्लास को सीधे कॉल कर सकता है और इसे बदल सकता है।
अपरिवर्तनीयता को मजबूर करने के लिए आप या तो इसे क्लोजर में लागू कर सकते हैं, या जावा वर्ग का विस्तार कर सकते हैं और सभी परिवर्तनीय विधि कार्यान्वयन में अपवाद फेंक सकते हैं।
- 1. क्लोजर में मैं जावा क्लास कैसे लगा सकता हूं?
- 2. मैं पर्ल क्लास कैसे बना सकता हूं?
- 3. मैं लुआ स्क्रिप्ट को अपरिवर्तनीय कैसे बना सकता हूं?
- 4. कोई अतिरिक्त संकेत के बिना क्लोजर में चक्रीय (और अपरिवर्तनीय) डेटा संरचना कैसे बना सकता है?
- 5. मैं जावास्क्रिप्ट में कस्टम इवेंट क्लास कैसे बना सकता हूं?
- 6. मैं जावा सैंडबॉक्स कैसे बना सकता हूं?
- 7. मैं जावा से क्लोजर में कैसे संक्रमण कर सकता हूं?
- 8. क्लोजर में अपरिवर्तनीय डेटा के साथ संख्यात्मक सिमुलेशन कैसे करें?
- 9. मैं सी # में वास्तव में अपरिवर्तनीय दोगुनी लिंक कैसे बना सकता हूं?
- 10. मैं जावा में गैर-धारावाहिक क्षेत्र कैसे बना सकता हूं?
- 11. मैं जावा में हैश टेबल कैसे बना सकता हूं?
- 12. क्लोजर में मैं युगल के एक आदिम द्वि-आयामी (2 डी) सरणी कैसे बना सकता हूं?
- 13. क्लोजर में, जावा क्लास गतिशील रूप से कैसे उपयोग करें?
- 14. मैं इस जावा जेनेरिक कास्ट कैसे बना सकता हूं?
- 15. जावा में अपरिवर्तनीय सेम
- 16. मैं पर्ल और मूस में अपरिवर्तनीय वस्तुओं का चक्रीय ग्राफ कैसे बना सकता हूं?
- 17. मैं स्कैला में बहुआयामी वेक्टर कैसे बना सकता हूं?
- 18. क्लोजर जेन-क्लास
- 19. क्लोजर में मैं "मानचित्र में आईडी जोड़ने" फ़ंक्शन कैसे बना सकता हूं?
- 20. मैं डिमन थ्रेड कैसे बना सकता हूं?
- 21. क्या मैं पर्ल में जावा जैसी इंटरफेस बना सकता हूं?
- 22. मैं कैसे निर्धारित कर सकता हूं कि जावा क्लास प्रतिबिंब
- 23. मैं निष्पादन योग्य जावा प्रोग्राम कैसे बना सकता हूं?
- 24. मैं ग्रोवी में वैश्विक चर कैसे बना सकता हूं और एक्सेस कर सकता हूं?
- 25. मैं जावा प्रोग्राम के लिए .exe कैसे बना सकता हूं?
- 26. मैं डेटाबेस से जावा क्लास कैसे लोड कर सकता हूं?
- 27. क्लोजर में मैं लगातार चल रही पृष्ठभूमि प्रक्रिया कैसे बना सकता हूं?
- 28. मैं क्लोजर में जावा-जैसी ऑब्जेक्ट कैसे बना सकता हूं जो बिल्डर पैटर्न का उपयोग करता है?
- 29. मैं रेलों में सिंगलटन ग्लोबल ऑब्जेक्ट कैसे बना सकता हूं
- 30. जावा अपरिवर्तनीय तार भ्रम
सॉर्ट किए गए सेट को prio (prio, value) जोड़ी में prio द्वारा सॉर्ट करने के लिए कैसे पता चलता है? –
क्लोजर वैक्टरों की तुलनात्मक रूप से वैक्टरों की तुलना करता है, इसलिए यह प्राथमिकता से पहले क्रमबद्ध होगा, और दूसरा मूल्य से। – CAdaker
दरअसल, स्रोत को देखते हुए, बराबर लंबाई के केवल वैक्टरों की तुलना लेक्सिकोोग्राफिक रूप से की जाती है। लेकिन इस मामले में यह कोई समस्या नहीं है। – CAdaker