java queue queue methods
इस ट्यूटोरियल में, हम चर्चा करेंगे कि जावा में एक कतार क्या है, इसका उपयोग कैसे करें, जावा कतार उदाहरण, जावा कतार तरीके और कतार इंटरफ़ेस कार्यान्वयन:
एक कतार एक रेखीय डेटा संरचना या जावा में एक संग्रह है जो तत्वों को एक फीफो (फर्स्ट इन, फर्स्ट आउट) क्रम में संग्रहीत करता है।
कतार संग्रह के दो छोर हैं, अर्थात् सामने और पीछे। तत्वों को पीछे से जोड़ा जाता है और सामने से हटा दिया जाता है।
=> सभी के लिए जावा प्रशिक्षण श्रृंखला देखने के लिए यहां जाएं।
मुझे एक नकली ईमेल पता चाहिए
आप क्या सीखेंगे:
एक जावा कतार क्या है?
एक कतार डेटा संरचना को नीचे दिखाए अनुसार दर्शाया गया है:
जैसा कि ऊपर चित्र में दिखाया गया है, एक कतार एक संरचना होती है जिसमें दो बिंदु होते हैं अर्थात् प्रारंभ (सामने) और अंत (पीछे)। तत्वों को पीछे के अंत में कतार में डाला जाता है और कतार में सामने से हटा दिया जाता है।
जावा में, क्यू एक इंटरफ़ेस है जो java.util पैकेज का एक हिस्सा है। कतार इंटरफ़ेस जावा संग्रह इंटरफ़ेस का विस्तार करता है।
कतार इंटरफ़ेस की सामान्य परिभाषा है:
public interface Queue extends Collection
क्यूंकि क्यू एक इंटरफ़ेस है, इसे तुरंत नहीं किया जा सकता है। क्यू इंटरफ़ेस की कार्यक्षमता को लागू करने के लिए हमें कुछ ठोस वर्गों की आवश्यकता है। दो वर्ग क्यू इंटरफ़ेस (इंटरफेस) को लागू करते हैं यानि लिंक्डलिस्ट और प्रायोरिटी क्यू।
कतार डेटा संरचना की कुछ प्रमुख विशेषताएं निम्नलिखित हैं:
- कतार फीफो (प्रथम में, पहले बाहर) आदेश का पालन करती है। इसका मतलब है कि तत्व को अंत में कतार में डाला जाता है और शुरुआत में कतार से हटा दिया जाता है।
- जावा कतार इंटरफ़ेस संग्रह इंटरफ़ेस के सभी तरीके प्रदान करता है जैसे प्रविष्टि, विलोपन, आदि।
- लिंक्डलिस्ट और प्रायोरिटी क्यू वो क्लासेस हैं जो क्यू इंटरफ़ेस को लागू करते हैं। ArrayBlockingQueue अभी तक एक और वर्ग है जो क्यू इंटरफ़ेस को लागू करता है।
- कतार जो कि java.util पैकेज का एक हिस्सा है, को बिना कतारों के वर्गीकृत किया जा सकता है, जबकि java.util.the समवर्ती पैकेज में उपस्थित लोगों को कतारों में बांधा जाता है।
- Deque एक कतार है जो दोनों सिरों से सम्मिलन और विलोपन का समर्थन करता है।
- छल धागा-सुरक्षित है।
- BlockQQueues थ्रेड-सुरक्षित हैं और निर्माता-उपभोक्ता समस्याओं को लागू करने के लिए उपयोग किया जाता है।
- अवरोधक तत्व शून्य तत्वों की अनुमति नहीं देते हैं। नल मानों से संबंधित किसी भी ऑपरेशन का प्रयास किया जाता है, तो NullPointerException को फेंक दिया जाता है।
जावा में एक कतार का उपयोग कैसे करें?
जावा में एक कतार का उपयोग करने के लिए, हमें पहले कतार इंटरफ़ेस को निम्नानुसार आयात करना होगा:
import java.util.queue;
या
import java.util.*;
एक बार यह आयात हो जाने के बाद, हम नीचे दिखाए गए अनुसार एक कतार बना सकते हैं:
Queue str_queue = new LinkedList ();
क्यूंकि एक इंटरफ़ेस है, हम एक लिंक्डलिस्ट क्लास का उपयोग करते हैं जो कतार ऑब्जेक्ट बनाने के लिए क्यू इंटरफ़ेस को लागू करता है।
इसी तरह, हम अन्य ठोस वर्गों के साथ एक कतार बना सकते हैं।
Queue str_pqueue = new PriorityQueue (); Queue int_queue = new ArrayDeque ();
अब जब कतार ऑब्जेक्ट बनाया जाता है, तो हम कतार विधि को जोड़ सकते हैं, जैसा कि नीचे दिखाए गए तरीके के माध्यम से मान प्रदान करते हैं।
str_queue.add(“one”); str_queue.add(“two”); str_queue.add(“three”);
जावा कतार उदाहरण
import java.util.*; public class Main { public static void main(String[] args) { //declare a Queue Queue str_queue = new LinkedList(); //initialize the queue with values str_queue.add('one'); str_queue.add('two'); str_queue.add('three'); str_queue.add('four'); //print the Queue System.out.println('The Queue contents:' + str_queue); } }
आउटपुट:
कतार सामग्री: [एक, दो, तीन, चार]
उपरोक्त उदाहरण एक कतार वस्तु की घोषणा और आरंभीकरण को दर्शाता है। फिर, हम केवल कतार की सामग्री को प्रिंट करते हैं।
कतार के तरीके जावा में
इस खंड में, हम कतार के लिए एपीआई के तरीकों पर चर्चा करेंगे। कतार इंटरफ़ेस सम्मिलित करने, हटाने, झपटने आदि जैसे विभिन्न कार्यों का समर्थन करता है, कुछ ऑपरेशन अपवाद छोड़ते हैं जबकि कुछ विशिष्ट मान लौटाते हैं जब विधि सफल या विफल हो जाती है।
ध्यान दें कि जावा में क्यू संग्रह में कोई विशेष परिवर्तन नहीं हैं। नीचे दिए गए तरीके जावा के बाद के संस्करणों जैसे जावा 9 आदि में भी उपलब्ध हैं।
नीचे दी गई तालिका इन सभी विधियों का सार प्रस्तुत करती है।
तरीका | विधि प्रोटोटाइप | विवरण |
---|---|---|
आकार | int आकार () | कतार में तत्वों का आकार या संख्या लौटाता है। |
जोड़ना | बूलियन ऐड (E e) | क्षमता पर प्रतिबंध का उल्लंघन किए बिना कतार के अंत (पूंछ) पर तत्व ई को कतार में जोड़ता है। अगर क्षमता समाप्त हो जाती है तो सफलता या अवैध स्टैडटेक्स्टैप्शन। |
तिरछी | ई झांकना () | इसे हटाए बिना कतार का सिर (सामने) लौटाता है। |
तत्त्व | ई तत्व () | एक ही ऑपरेशन को झांकना () विधि के रूप में करता है। कतार खाली होने पर NoSuchElementException को फेंकता है। |
हटाना | ई निकालें () | कतार के प्रमुख को हटाकर वापस कर देता है। यदि पंक्ति खाली है तो NoSuchElementException को फेंकता है। |
मतदान | ई चुनाव () | कतार के प्रमुख को हटाकर वापस कर देता है। यदि कतार खाली है, तो यह अशक्त है। |
प्रस्ताव | बूलियन ऑफ़र (ई ई) | क्षमता प्रतिबंधों का उल्लंघन किए बिना नए तत्व ई को कतार में डालें। |
कतार तत्वों को Iterating
हम कतार के तत्वों को या तो फॉरेप लूप का उपयोग कर सकते हैं या एक इटरेटर का उपयोग कर सकते हैं। नीचे दिए गए कार्यक्रम दोनों दृष्टिकोण कतार को पार करने के लिए लागू करते हैं।
import java.util.*; public class Main { public static void main(String[] args) { //declare a Queue Queue LL_queue = new LinkedList(); //initialize the Queue LL_queue.add('Value-0'); LL_queue.add('Value-1'); LL_queue.add('Value-2'); LL_queue.add('Value-3'); //traverse the Queue using Iterator System.out.println('The Queue elements through iterator:'); Iterator iterator = LL_queue.iterator(); while(iterator.hasNext()){ String element = (String) iterator.next(); System.out.print(element + ' '); } System.out.println('
The Queue elements using for loop:'); //use new for loop to traverse the Queue for(Object object : LL_queue) { String element = (String) object; System.out.print(element + ' '); } } }
आउटपुट:
सूचना के माध्यम से कतार तत्व:
मान -० मान -१ मान -२ मान -३
लूप के लिए उपयोग करने वाले कतार तत्व:
मान -० मान -१ मान -२ मान -३
जावा कतार कार्यान्वयन
नीचे दिया गया कार्यक्रम उन तरीकों को प्रदर्शित करता है जो हमने ऊपर चर्चा की थी।
import java.util.*; public class Main { public static void main(String[] args) { Queue q1 = new LinkedList(); //Add elements to the Queue q1.add(10); q1.add(20); q1.add(30); q1.add(40); q1.add(50); System.out.println('Elements in Queue:'+q1); //remove () method =>removes first element from the queue System.out.println('Element removed from the queue: '+q1.remove()); //element() => returns head of the queue System.out.println('Head of the queue: '+q1.element()); //poll () => removes and returns the head System.out.println('Poll():Returned Head of the queue: '+q1.poll()); //returns head of the queue System.out.println('peek():Head of the queue: '+q1.peek()); //print the contents of the Queue System.out.println('Final Queue:'+q1); } }
आउटपुट:
कतार में तत्व: [१०, २०, ३०, ४०, ५०]
कतार से निकाला गया तत्व: 10
कतार के प्रमुख: 20
पोल (): कतार के प्रमुख लौटे: 20
झांकना (): कतार का प्रमुख: 30
अंतिम कतार: [३०, ४०, ५०]
जावा कतार एरे कार्यान्वयन
कतार कार्यान्वयन एक स्टैक कार्यान्वयन के रूप में सीधा नहीं है। सबसे पहले, कतार में दो बिंदु, पीछे और सामने होते हैं। साथ ही, दो अलग-अलग छोरों पर अलग-अलग ऑपरेशन किए जाते हैं।
Arrays का उपयोग करके कतार को लागू करने के लिए, हम पहले एक सरणी घोषित करते हैं जो n पंक्ति के तत्वों की संख्या को रखेगा।
फिर हम इस कतार में किए जाने वाले निम्नलिखित कार्यों को परिभाषित करते हैं।
# 1) एन्क्यू: कतार में एक तत्व सम्मिलित करने के लिए एक ऑपरेशन एन्क्यू (प्रोग्राम में फ़ंक्शन कतार्यूएनक्यू) है। पीछे के छोर पर एक तत्व डालने के लिए, हमें पहले जांचना होगा कि क्या कतार भरी हुई है। यदि यह भरा हुआ है, तो हम तत्व नहीं डाल सकते हैं। अगर पीछे # 2) दोष: कतार से किसी तत्व को हटाने के लिए ऑपरेशन Dequeue (प्रोग्राम में फ़ंक्शन queueDequeue) है। सबसे पहले, हम जाँचते हैं कि कतार खाली है या नहीं। काम करने के लिए dequeue ऑपरेशन के लिए, कतार में कम से कम एक तत्व होना चाहिए। # 3) सामने: यह विधि कतार के सामने देता है। # 4) प्रदर्शन: यह विधि कतार का पता लगाती है और कतार के तत्वों को प्रदर्शित करती है। निम्न जावा प्रोग्राम कतार के एरियर कार्यान्वयन को प्रदर्शित करता है। आउटपुट: प्रारंभिक कतार: जैसा कि हमने उपरोक्त प्रोग्राम में Arrays का उपयोग करके क्यू डेटा संरचना को लागू किया है, हम लिंक्ड लिस्ट का उपयोग करके भी क्यू को लागू कर सकते हैं। हम इस कार्यक्रम में समान विधियों enqueue, dequeue, front, और display को कार्यान्वित करेंगे। अंतर यह है कि हम ऐरे के बजाय लिंक्ड सूची डेटा संरचना का उपयोग करेंगे। नीचे दिए गए कार्यक्रम जावा में क्यू की लिंक्ड सूची कार्यान्वयन को प्रदर्शित करता है। आउटपुट: तत्व 6 कतार में जोड़ा गया BlockingQueue Java 1.5 में जोड़ा गया एक इंटरफ़ेस है और इसका एक हिस्सा है java.util.concurrent पैकेज। अवरोधक पूर्ण या खाली होने की स्थिति में यह इंटरफ़ेस अवरुद्ध होने का परिचय देता है। इस प्रकार जब एक थ्रेड कतार में पहुँचता है और कतार में (एन्केयू) तत्वों को सम्मिलित करने का प्रयास करता है जो पहले से ही भरा हुआ है, तब तक अवरुद्ध हो जाता है जब तक कि एक और धागा कतार में जगह नहीं बना लेता (हो सकता है कि डीक्यू ऑपरेशन या क्लियरिंग कतार द्वारा)। इसी प्रकार, जब आप डिक्कु ऑपरेशन के लिए तत्व उपलब्ध नहीं होते हैं, तो कतार के खाली होने की स्थिति में, ऑपरेशन अवरुद्ध हो जाता है। BlockingQueue मेथड्स कुछ प्रकार के कंसीलर कंट्रोल को आंतरिक तालों की तरह इस्तेमाल करते हैं और परमाणु होते हैं। BlockingQueue एक समवर्ती कतार है जो कतार के संचालन को समवर्ती रूप से प्रबंधित करती है। BlockingQueue नीचे दिखाया गया है: ध्यान दें कि BlockingQueue शून्य मानों को स्वीकार नहीं करता है। NullPointerException में कतार परिणाम में एक शून्य मान सम्मिलित करने का प्रयास। जावा में प्रदान किए गए कुछ ब्लॉकिंगक्यूव्यू कार्यान्वयन लिंक्डब्लॉकिंग क्यू, प्रायोरिटीब्लॉकिंग क्यू, अर्रेबब्लॉकिंग क्यू और सिन्कोनसक्यूयू हैं। ये सभी कार्यान्वयन थ्रेड-सुरक्षित हैं। ब्लॉकिंग क्यू दो प्रकार के होते हैं: बंधी हुई कतार में, कतार की क्षमता कतार के निर्माता को दी जाती है। कतार की घोषणा इस प्रकार है: BlockingQueue blockQueue = new LinkedBlockingDeque (5); अनबाउंड कतार में, हम कतार की क्षमता को स्पष्ट रूप से सेट नहीं करते हैं और यह आकार में बढ़ सकता है। क्षमता Integer.MAX_VALUE पर सेट है। निर्बाध कतार की घोषणा इस प्रकार है: BlockingQueue blockQueue = new LinkedBlockingDeque (); BlockingQueue इंटरफ़ेस मुख्य रूप से निर्माता-उपभोक्ता प्रकार की समस्याओं के लिए उपयोग किया जाता है जिसमें निर्माता संसाधनों का उत्पादन करता है और उपभोक्ता संसाधनों का उपभोग करता है। Q # 1) जावा में एक कतार क्या है? उत्तर: जावा में कतार एक रेखीय क्रमबद्ध डेटा संरचना है जो तत्वों का FIFO (प्रथम इन, फर्स्ट आउट) क्रमबद्ध है। इसका मतलब यह है कि कतार में पहले डाला गया तत्व हटाए जाने वाला पहला तत्व होगा। जावा में, कतार को इंटरफ़ेस के रूप में लागू किया जाता है जो संग्रह इंटरफ़ेस को विरासत में मिला है। क्यू # 2) क्या एक क्यू धागा-सुरक्षित जावा है? उत्तर: सभी कतारें थ्रेड-सुरक्षित नहीं हैं, लेकिन Java में BlockingQueues थ्रेड-सुरक्षित हैं। क्यू # 3) कौन सा तेज है - स्टैक या कतार? उत्तर: ढेर तेज है। स्टैक में, तत्वों को केवल एक छोर से संसाधित किया जाता है, इसलिए किसी भी स्थानांतरण की आवश्यकता नहीं होती है। लेकिन कतार में, तत्वों को स्थानांतरित करने और समायोजित करने की आवश्यकता है क्योंकि तत्वों को सम्मिलित करने और हटाने के लिए दो अलग-अलग बिंदु हैं। क्यू # 4) कतार के प्रकार क्या हैं? उत्तर: कतार निम्न प्रकार की हैं: क्यू # 5) क्यू इस्तेमाल किया जाता है? उत्तर: कतार डेटा संरचना का उपयोग सिंक्रनाइज़ेशन प्रयोजनों के लिए किया जाता है। कतार का उपयोग डिस्क और CPU शेड्यूलिंग के लिए भी किया जाता है। इस ट्यूटोरियल में, हमने सरल विवरणों के साथ-साथ उनके विवरण जैसे घोषणाओं, प्रारंभिक कार्यान्वयन और विधियों पर चर्चा की है। हमने जावा में कतार के Array और LinkedList कार्यान्वयन के बारे में भी सीखा। हमारे आगामी ट्यूटोरियल में, हम और अधिक प्रकार की कतारों के बारे में विस्तार से चर्चा करेंगे। => यहाँ सभी जावा ट्यूटोरियल की जाँच करें। class Queue { private static int front, rear, capacity; private static int queue[]; Queue(int size) { front = rear = 0; capacity = size; queue = new int[capacity]; } // insert an element into the queue static void queueEnqueue(int item) { // check if the queue is full if (capacity == rear) { System.out.printf('
Queue is full
'); return; } // insert element at the rear else { queue[rear] = item; rear++; } return; } //remove an element from the queue static void queueDequeue() { // check if queue is empty if (front == rear) { System.out.printf('
Queue is empty
'); return; } // shift elements to the right by one place uptil rear else { for (int i = 0; i
कतार खाली है
एन्क्यू ऑपरेशन के बाद कतार:
10 = 30 = 50 = 70 =
कतार के सामने तत्व: 10
कतार भरी है
10 = 30 = 50 = 70 =
दो dequeue संचालन के बाद कतार: 50 = 70 =
कतार के सामने का तत्व: 50जावा कतार लिंक्ड सूची कार्यान्वयन
class LinkedListQueue { private Node front, rear; private int queueSize; // queue size //linked list node private class Node { int data; Node next; } //default constructor - initially front & rear are null; size=0; queue is empty public LinkedListQueue() { front = null; rear = null; queueSize = 0; } //check if the queue is empty public boolean isEmpty() { return (queueSize == 0); } //Remove item from the front of the queue. public int dequeue() { int data = front.data; front = front.next; if (isEmpty()) { rear = null; } queueSize--; System.out.println('Element ' + data+ ' removed from the queue'); return data; } //Add data at the rear of the queue. public void enqueue(int data) { Node oldRear = rear; rear = new Node(); rear.data = data; rear.next = null; if (isEmpty()) { front = rear; } else { oldRear.next = rear; } queueSize++; System.out.println('Element ' + data+ ' added to the queue'); } //print front and rear of the queue public void print_frontRear() { System.out.println('Front of the queue:' + front.data + ' Rear of the queue:' + rear.data); } } class Main{ public static void main(String a[]){ LinkedListQueue queue = new LinkedListQueue(); queue.enqueue(6); queue.enqueue(3); queue.print_frontRear(); queue.enqueue(12); queue.enqueue(24); queue.dequeue(); queue.dequeue(); queue.enqueue(9); queue.print_frontRear(); } }
तत्व 3 कतार में जोड़ा गया
कतार के सामने: कतार से 6: 3
तत्व 12 कतार में जोड़ा गया
तत्व 24 कतार में जोड़ा गया
तत्व 6 कतार से हटा दिया गया
तत्व 3 कतार से हटा दिया गया
तत्व 9 कतार में जोड़ा गया
कतार के सामने: 12 कतार के पीछे: 9ब्लॉकिंग जावा में
ब्लॉकिंग क्यू प्रकार
बंधी हुई कतार
बिना कतार के
सी ++ में विरासत के प्रकार
बार बार पूछे जाने वाले प्रश्न
निष्कर्ष
अनुशंसित पाठ