Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Java

प्राथमिकता कतार जावा

जावा में प्रायोरिटी क्यू का उपयोग कैसे करें

प्रोग्रामिंग में प्राथमिकता कतारों का उपयोग डेटा संरचना बनाने के लिए किया जाता है जहां उच्चतम मूल्य वाले डेटा की वस्तु को पहले संरचना द्वारा संसाधित किया जाना चाहिए।

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

यह ट्यूटोरियल जावा में प्रायोरिटी क्यू की मूल बातों पर चर्चा करेगा और यह पता लगाएगा कि क्यू कैसे बनाया जाता है। यह ट्यूटोरियल प्रायोरिटी क्यू द्वारा प्रस्तावित मुख्य विधियों का भी पता लगाएगा जिनका उपयोग कतार की सामग्री को पुनः प्राप्त करने और उसमें हेरफेर करने के लिए किया जा सकता है।

जावा कतार और प्राथमिकता कतार

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

मान लीजिए आप एक रेस्तरां में हैं, और आपने एक ऑर्डर दिया है। जब प्रत्येक ग्राहक ने अपने भोजन का आदेश दिया, तो आप उस क्रम में परोसना चाहेंगे, क्योंकि यह सबसे उचित तरीका है। इसलिए, यदि आपने जैक के बाद अपना खाना ऑर्डर किया है, तो आपको जैक के तुरंत बाद परोसना होगा। यह एक कतार का उदाहरण है।

इस ट्यूटोरियल के प्रयोजनों के लिए, हम क्यूई इंटरफ़ेस के प्रायोरिटीक्यू कार्यान्वयन पर ध्यान केंद्रित करने जा रहे हैं, जिसका उपयोग जावा में प्राथमिकता क्यू बनाने के लिए किया जाता है।

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

प्राथमिकता कतार बनाएं

जावा में प्राथमिकता कतार बनाने के लिए, आपको पहले java.util.PriorityQueue आयात करना होगा पैकेज। इस पैकेज में प्रायोरिटी क्यू विधि है जिसका उपयोग हम अपनी कतार बनाने के लिए कर सकते हैं। हम इस कोड का उपयोग करके प्रायोरिटी क्यू पैकेज आयात कर सकते हैं:

81% प्रतिभागियों ने कहा कि बूटकैंप में भाग लेने के बाद उन्हें अपनी तकनीकी नौकरी की संभावनाओं के बारे में अधिक आत्मविश्वास महसूस हुआ। आज ही एक बूटकैंप से मिलान करें।

बूटकैंप शुरू करने से लेकर अपनी पहली नौकरी खोजने तक, औसत बूटकैंप ग्रेड ने करियर संक्रमण में छह महीने से भी कम समय बिताया।

java.util.PriorityQueue आयात करें;

अब हमने प्रायोरिटी क्यू को आयात कर लिया है, हम पैकेज का उपयोग करके एक कतार बना सकते हैं। प्रायोरिटी क्यू बनाने के लिए इस्तेमाल किया जाने वाला सिंटैक्स यहां दिया गया है:

PriorityQueuequeue_name =newPriorityQueue<>();

आइए इसे तोड़ दें:

  • प्राथमिकता कतार हमारे कार्यक्रम को बताता है कि हम एक प्राथमिकता कतार बनाना चाहते हैं।
  • डेटा प्रकार हमारी कतार किस प्रकार का डेटा संग्रहीत करेगी।
  • कतार_नाम वेरिएबल का नाम है जिसे हमारे द्वारा बनाई गई कतार को सौंपा जाएगा।
  • नई प्रायोरिटी क्यू (); प्राथमिकता कतार प्रारंभ करता है।

तो, मान लीजिए कि हम एक कतार बनाना चाहते हैं जो हमारे रेस्तरां में ग्राहकों के आदेशों को संग्रहीत करती है। हम चाहते हैं कि हमारी कतार प्रत्येक ग्राहक के टेबल नंबर को स्टोर करे। हम निम्नलिखित कोड का उपयोग करके इस स्टैक को बना सकते हैं:

<पूर्व>प्राथमिकता कतार<पूर्णांक> आदेश =नई प्राथमिकता कतार<>();

इस उदाहरण में, हमने प्रायोरिटी क्यू का एक उदाहरण बनाया है जिसे orders . कहा जाता है जो पूर्णांक मान संग्रहीत करता है। हमारी कतार में, फीफो डेटा संरचना का उपयोग करके तत्वों को एक्सेस और हटा दिया जाएगा।

प्राथमिकता कतार में आइटम जोड़ें

जावा में, कतार के प्रत्येक तत्व को item . कहा जाता है ।

किसी आइटम को कतार में जोड़ने के लिए, हम add() . का उपयोग कर सकते हैं तरीका। यह विधि एक पैरामीटर को स्वीकार करती है:उस आइटम का मान जिसे आप अपनी कतार में जोड़ना चाहते हैं। यदि कतार भरी हुई है, तो add() विधि एक अपवाद लौटाएगी।

इसके अलावा, हम offer() . का उपयोग कर सकते हैं किसी आइटम को कतार में जोड़ने की विधि। add() . के बीच का अंतर और offer() क्या वह offer() है यदि कतार भरी हुई है, तो झूठी वापसी होती है, जबकि add() एक अपवाद फेंकता है।

मान लीजिए कि हम अपने स्टैक में टेबल #22 और #17 को इसी क्रम में जोड़ना चाहते हैं क्योंकि उन्होंने अभी-अभी अपना लंच ऑर्डर दिया है। हम इस कोड का उपयोग करके ऐसा कर सकते हैं:

आयात करें आदेश। जोड़ें (22); System.println ("आदेश:" + आदेश); आदेश.प्रस्ताव(17); System.out.println ("अपडेट किए गए ऑर्डर:" + ऑर्डर); }}

हमारा कोड लौटाता है:

आदेश:[22]अपडेट किया गया आदेश:[22, 17]

आइए हमारे उदाहरण को तोड़ दें। सबसे पहले, हमने प्रायोरिटी क्यू वर्ग को आयात किया, जिसका उपयोग हम बाद में अपने कोड में करते हैं। फिर हमने AddCustomer नामक एक वर्ग घोषित किया, जो इस उदाहरण के लिए हमारे कोड को संग्रहीत करता है। यहां बताया गया है कि हमारी कक्षा के अंदर का कोड कैसे काम करता है:

  1. हम new PriorityQueue<>(); एक प्राथमिकता कतार बनाने के लिए जिसे orders . कहा जाता है ।
  2. हम add() . का उपयोग करते हैं हमारे स्टैक में तालिका #22 जोड़ने की विधि।
  3. हम शब्द का प्रिंट आउट लेते हैं Orders: इसके बाद हमारे स्टैक की सामग्री को कंसोल पर ले जाया जाता है।
  4. हम offer() का उपयोग करते हैं हमारे स्टैक में तालिका #17 जोड़ने की विधि।
  5. हम शब्द का प्रिंट आउट लेते हैं Updated orders: कंसोल में हमारे स्टैक की संशोधित सामग्री के बाद।

22 हमारे स्टैक में सबसे पहले दिखाई देता है, और इसलिए जब हम किसी तत्व को हटाते हैं तो यह पहला होगा। दूसरे शब्दों में, तालिका # 22 हमारे स्टैक के शीर्ष पर है। तालिका #17 हमारे स्टैक में दूसरे स्थान पर संग्रहीत है। याद रखें, प्राथमिकता कतारों को फीफो क्रम में क्रमबद्ध किया जाता है।

हमारा कोड हमारे मूल आदेशों के साथ एक सरणी देता है, फिर हमारे अद्यतन आदेशों के साथ एक सरणी देता है।

PriorityQueue से आइटम निकालें

प्रायोरिटी क्यू से किसी आइटम को हटाने के लिए दो विधियों का उपयोग किया जा सकता है:

  • remove() कतार से किसी तत्व के एकल उदाहरण को हटाता है।
  • poll() कतार से पहले तत्व को हटाता है और हटाए गए आइटम को वापस करता है।

मान लीजिए कि हमारे रसोइये ने ऑर्डर #17 को संसाधित किया है और इसे स्टैक से हटाना चाहते हैं। उस आदेश के संसाधित होने के बाद, हमारे शेफ ने ऑर्डर #22 तैयार किया है और इसे स्टैक से हटाना चाहते हैं।

ऑर्डर #17 हमारे स्टैक में स्थान 2 पर है, और ऑर्डर #22 स्थिति 1 पर है। हम इन वस्तुओं को उसी क्रम में हटाना चाहते हैं। आदेशों को हटाने के लिए हम इस कोड का उपयोग कर सकते हैं:

import java.util.PriorityQueue;class RemoveOrders { public static void main(String[] args) {PriorityQueue Orders =newPriorityQueue<>(); आदेश। जोड़ें (22); आदेश। जोड़ें (17); बूलियन हटा दिया गया =आदेश। हटाएं (2); System.out.println ("क्या आदेश # 17 हटा दिया गया था?" + हटा दिया गया); int second_removed =order.poll (); System.out.println ("ऑर्डर #" + second_removed + "कतार से हटा दिया गया था।"); }} 

हमारा कोड लौटाता है:

क्या आदेश #17 को हटा दिया गया था? trueOrder #22 को कतार से हटा दिया गया था।

आइए हमारे कोड को तोड़ दें। सबसे पहले, हमने remove() . का इस्तेमाल किया हमारे स्टैक में स्थिति 2 पर ऑर्डर को हटाने की विधि। इसने आदेश #17 को हटा दिया।

फिर हमारे कोड ने एक संदेश मुद्रित किया, जिसमें कहा गया था, Was order #17 removed? उसके बाद remove() . का परिणाम आता है तरीका। remove() हमारे स्टैक से #17 को सफलतापूर्वक हटा दिया गया है, इसलिए विधि सही हो गई है।

इसके बाद, हमने poll() . का इस्तेमाल किया हमारे स्टैक में शीर्ष आइटम को निकालने की विधि। इस मामले में, वह आदेश #22 था। poll() आदेश #22 हटा दिया और हटाए गए आइटम को वापस कर दिया। आइटम को हटा दिए जाने के बाद, हमने संदेश मुद्रित किया Order #[order number removed] was removed from the queue. कंसोल के लिए।

आइटम पुनर्प्राप्त करें

peek() विधि का उपयोग कतार आइटम (कतार में पहला आइटम) के प्रमुख को पुनः प्राप्त करने के लिए किया जाता है। मान लीजिए कि हम अपने स्टैक में अगले ऑर्डर का मूल्य जानना चाहते हैं क्योंकि हमारा रसोइया एक नया ऑर्डर लेने के लिए तैयार है।

हम इस कोड का उपयोग उस ग्राहक की तालिका संख्या प्राप्त करने के लिए कर सकते हैं जो अगली पंक्ति में है:

import java.util.PriorityQueue;class RetrieveOrder {सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग [] args) {प्राथमिकता क्यू <पूर्णांक> आदेश =नई प्राथमिकता क्यू <> (); आदेश। जोड़ें (22); आदेश। जोड़ें (17); इंट नेक्स्ट_ऑर्डर =ऑर्डर.पीक (); System.out.println ("संसाधित होने वाला अगला आदेश तालिका #" + next_order + "।"); }} 

हमारा कोड लौटाता है:

संसाधित होने वाला अगला आदेश तालिका #22 है।

हमारे स्टैक में पहला आइटम 22 है, और इसलिए जब हम peek() . का उपयोग करते हैं विधि, हमारा प्रोग्राम मान 22 लौटाता है। हमारे कोड की अंतिम पंक्ति पर, हम एक संदेश का प्रिंट आउट लेते हैं, The next order to be processed is table #[number of first order in stack]. , जहां स्टैक में पहले ऑर्डर की संख्या peek() . द्वारा खोजी गई थी ।

प्राथमिकता कतार से पुनरावृति करें

अक्सर, जब आप क्यू के साथ काम कर रहे होते हैं, तो आप प्राथमिकता क्यू के तत्वों पर एक इटरेटर बनाना चाहेंगे।

ऐसा करने के लिए, हम iterator() . का उपयोग कर सकते हैं विधि, जो java.util.Iterator पैकेज का हिस्सा है। लेकिन इससे पहले कि हम iterator() . का उपयोग करें विधि, हमें पहले इस कोड का उपयोग करके Iterator पैकेज को आयात करना होगा:

import java.util.Iterator;

मान लीजिए कि हम कंसोल के लिए रेस्तरां ऑर्डर की हमारी कतार में प्रत्येक आइटम की एक सूची प्रिंट करना चाहते हैं। हम इस कोड का उपयोग करके ऐसा कर सकते हैं:

आयात करें आदेश। जोड़ें (22); आदेश जोड़ें (17); आदेश जोड़ें (14); आदेश जोड़ें (19); इटरेटर <पूर्णांक> पुनरावृति =आदेश। इटरेटर (); जबकि (iterate.hasNext ()) {System.out.println (iterate.next ()); } }}

हमारा कोड लौटाता है:

22171419

हमारे कोड में, हम पहले अपनी कतार में चार मान जोड़ते हैं। फिर हम iterator() . का उपयोग करते हैं एक पुनरावर्तक बनाने की विधि जिसका उपयोग हम अपनी प्राथमिकता कतार में प्रत्येक आइटम के माध्यम से जाने के लिए कर सकते हैं। फिर हम एक while . बनाते हैं लूप जो हमारे इटरेटर में प्रत्येक आइटम के माध्यम से चलता है — orders . में प्रत्येक आइटम के लिए कतार - और कतार में अगला मान प्रिंट करता है।

अतिरिक्त प्राथमिकता कतार विधियाँ

तीन और विधियाँ हैं जिनका उपयोग अक्सर प्रायोरिटी क्यू वर्ग के साथ किया जाता है। ये इस प्रकार हैं:

विधि का नाम विवरण
आकार () कतार की लंबाई लौटाता है।
toArray() कतार को एक सरणी में बदलता है।
शामिल है(elementName) एक तत्व के लिए क्यू की खोज करता है।

निष्कर्ष

कतार इंटरफ़ेस को लागू करने के लिए जावा में प्रायोरिटी क्यू क्लास का उपयोग किया जाता है। कतारें FIFO डेटा संरचना का उपयोग करती हैं, इसलिए इसमें पहला आइटम पहले वाला होता है।

यह ट्यूटोरियल जावा में क्यू और प्रायोरिटी क्यू की मूल बातों के माध्यम से चला। हमने यह भी चर्चा की कि एक कतार कैसे बनाई जाए और मुख्य विधियों का उपयोग आप वस्तुओं को पुनः प्राप्त करने और एक कतार में हेरफेर करने के लिए कर सकते हैं।

अब आपके पास वे टूल हैं जिनकी आपको एक समर्थक की तरह Java प्रायोरिटी क्यूई क्लास का उपयोग शुरू करने की आवश्यकता है!


  1. जावा में स्विंग थ्रेड-सुरक्षित है?

    नहीं, जावा स्विंग जावा में घटक थ्रेड-सुरक्षित नहीं हैं। क्यों स्विंग घटक थ्रेड-सुरक्षित नहीं हैं जावा स्विंग का एक मुख्य कारण थ्रेड-सुरक्षित नहीं है, इसके घटकों को विस्तारित करने के कार्य को सरल बनाना है। जावा स्विंग का एक अन्य कारण थ्रेड-सुरक्षित नहीं है क्योंकि इसमें ताले प्राप्त करना और जारी कर

  1. जावा में नेस्टेड इंटरफ़ेस

    हम किसी अन्य इंटरफ़ेस या कक्षा में एक इंटरफ़ेस घोषित कर सकते हैं। ऐसे इंटरफ़ेस को नेस्टेड इंटरफ़ेस कहा जाता है। नेस्टेड इंटरफ़ेस को नियंत्रित करने वाले निम्नलिखित नियम हैं। इंटरफ़ेस के भीतर घोषित एक नेस्टेड इंटरफ़ेस सार्वजनिक होना चाहिए। कक्षा के भीतर घोषित एक नेस्टेड इंटरफ़ेस में कोई भी एक्सेस संश

  1. जावा में इंटरफ़ेस

    एक इंटरफ़ेस जावा में एक संदर्भ प्रकार है। यह एक वर्ग के समान है। यह अमूर्त विधियों का एक संग्रह है। एक वर्ग एक इंटरफ़ेस लागू करता है, जिससे इंटरफ़ेस के अमूर्त तरीकों को विरासत में मिलता है। अमूर्त विधियों के साथ, एक इंटरफ़ेस में स्थिरांक, डिफ़ॉल्ट विधियाँ, स्थिर विधियाँ और नेस्टेड प्रकार भी हो सकते