अधिकांश लोगों के लिए, "कतार" शब्द बहुत कम सुखद संघों को ध्यान में लाता है। लेकिन आज हम अलग-अलग कतारों - जावा कतारों के बारे में बात कर रहे हैं। जावा में, एक क्यू कुछ भी है जो क्यू इंटरफ़ेस को इनहेरिट करता है, जो बदले में संग्रह इंटरफ़ेस का विस्तार करता है। इसका मतलब है कि कतारों को संग्रह की तरह माना जा सकता है।

जावा में कतारें दो ऑपरेटिंग सिद्धांतों का समर्थन करती हैं: FIFO और LIFO

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

LIFO (लास्ट इन, फर्स्ट आउट) सिद्धांत एक स्टैक के व्यवहार का वर्णन करता है - कतार में जोड़ा गया अंतिम तत्व इसे छोड़ने वाला पहला तत्व है उदाहरण के लिए, आप ताश की गड्डी के साथ इस तरह काम करते हैं: आप ताश के पत्तों को एक बार में ऊपर से तब तक निकालते हैं जब तक कि आप गड्डी के नीचे नहीं पहुंच जाते।

जावा में कतार पदानुक्रम इस तरह दिखता है :

यहां आप देख सकते हैं कि कतार में 3 कार्यान्वयन वर्ग हैं: लिंक्डलिस्ट , ऐरेडेक और प्रायोरिटीक्यूLinkedList और ArrayDeque सीधे Queue नहीं , बल्कि Deque इनहेरिट करते हैं ।

Deque एक इंटरफ़ेस है जिसे Java 6 में जोड़ा गया था। इसमें कई तरीके शामिल हैं जो क्यू के लिए उपयोगी हैं और एक क्यू को डबल-एंडेड (या द्विदिश) क्यू के रूप में कार्य करने की अनुमति देता है। इसका मतलब है कि यहFIFOऔरLIFO

Deque इंटरफ़ेस के दो वंशों में से एक ArrayDeque है । यह एक डबल-एंडेड कतार का समर्थन करता है जो आपको दोनों सिरों से तत्वों को सम्मिलित करने और निकालने देता है। यह एक गतिशील सरणी भी है जो स्वचालित रूप से आकार में बढ़ती है।

एक प्राथमिकता कतार वर्ग भी है, जो कतार का प्रत्यक्ष वंशज है : यह उन वर्गों से अलग व्यवहार करता है जो Deque को लागू करते हैं ।

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

PriorityQueue<String> priorityQueue = new PriorityQueue<>(Comparator.comparingInt(String::length));

priorityQueue.add("Andrew");
priorityQueue.add("John");
priorityQueue.add("Rob");

while (!priorityQueue.isEmpty()) {
   System.out.println(priorityQueue.remove());
}

यदि आप इस उदाहरण को चलाते हैं, तो कंसोल में आपको यह दिखाई देगा:

रोब
जॉन
एंड्रयू

चूंकि हम कतारों के साथ काम कर रहे हैं और नियमित संग्रह नहीं कर रहे हैं, इसलिए हमें सूची से तत्वों को हटाने की जरूरत है। ऐसा करने के लिए, हम इस निर्माण का उपयोग करते हैं:

while (!priorityQueue.isEmpty()) {
            System.out.println(priorityQueue.remove());
}

Deque इंटरफ़ेस कतार विधियों को इनहेरिट करता है और अपने स्वयं के कई दिलचस्प तरीके जोड़ता है :

शून्य ऐडफर्स्ट (ई ओबीजे) कतार के सामने ओबीजे तत्व जोड़ता है
शून्य ऐडलास्ट (ई ओबीजे) कतार के अंत में ओबीजे तत्व जोड़ता है
ई getFirst () कतार से पहला तत्व लौटाता है
ई getLast () कतार से अंतिम तत्व लौटाता है
बूलियन ऑफरफर्स्ट (ई ओबीजे) कतार के सामने ओबीजे तत्व जोड़ता है , और यदि तत्व जोड़ा जाता है तो सत्य लौटाता है। अन्यथा, गलत लौटाता है ।
बूलियन ऑफर लास्ट (ई ओबीजे) कतार के अंत में ओबीजे तत्व जोड़ता है , और यदि तत्व जोड़ा जाता है तो सत्य लौटाता है। अन्यथा, गलत लौटाता है ।
ई पोर () कतार से पहला तत्व प्राप्त करें और इसे हटा दें
शून्य धक्का (ई ओबीजे) कतार के सामने ओबीजे तत्व जोड़ता है
ई पीकफर्स्ट () कतार से पहला तत्व लौटाता है (लेकिन हटाता नहीं है)।
ई पीक लास्ट () कतार से अंतिम तत्व लौटाता है (लेकिन हटाता नहीं है)।
ई पोलफर्स्ट () कतार से पहले तत्व को लौटाता है और हटाता है। कोई तत्व नहीं होने पर शून्य वापस आ जाता है ।
ई मतदानअंतिम() कतार से अंतिम तत्व को लौटाता है और हटाता है। कोई तत्व नहीं होने पर शून्य वापस आ जाता है ।
ई हटाएं अंतिम () कतार के पहले तत्व को लौटाता है और हटाता है। कोई तत्व नहीं होने पर अपवाद फेंकता है।
ई निकालें पहले () कतार के अंतिम तत्व को लौटाता है और हटाता है। कोई तत्व नहीं होने पर अपवाद फेंकता है।
बूलियन रिमूव फर्स्ट ऑक्युरेंस (ऑब्जेक्ट ओब्ज) कतार से ओबीजे की पहली घटना को हटा देता है
बूलियन निकालें अंतिम घटना (ऑब्जेक्ट ओबीजे) कतार से ओब्ज की अंतिम घटना को हटाता है

आइए अब व्यवहार में इनमें से कुछ विधियों को देखें।

सबसे पहले, कतार में एक तत्व जोड़ें:

Deque<String> deque = new ArrayDeque<>();

        deque.add("Apple"); // Adds "Apple" to the end of the queue
        deque.addFirst("Orange"); // Adds "Orange" to the front of the queue
        deque.addLast("Pineapple"); // Adds "Pineapple" to the end of the queue

        System.out.println(deque);
[नारंगी, सेब, अनानास]

अब क्यू से मूल्य प्राप्त करते हैं:

Deque<String> deque = new ArrayDeque<>();

deque.add("Apple");
        deque.addFirst("Orange");
        deque.addLast("Pineapple");


        System.out.println("The first element is: "+ deque.getFirst());

        System.out.println("The last element is: " + deque.getLast());

    }

यह कोड कतार के पहले और अंतिम तत्व को प्रदर्शित करता है।

पहला तत्व है: नारंगी
अंतिम तत्व है: अनानास

Deque<String> deque = new ArrayDeque<>();

        deque.add("Apple");
        deque.addFirst("Orange");
        deque.addLast("Pineapple");
        deque.add("Lemon");

System.out.println(deque.pop()); // Get and remove the first element of the queue
System.out.println(deque.poll()); // Get and remove the first element of the queue

System.out.println(deque);

इस कोड को चलाना, हमें मिलता है:

नारंगी
सेब

[अनानास, नींबू]

पॉप () और पोल () के बीच का अंतर यह है कि यदि सूची खाली है तो पॉप () NoSuchElementException को फेंक देगा , लेकिन पोल () शून्य हो जाएगा ।

अब हम पोलफर्स्ट () और पोललास्ट () विधियों पर विचार करेंगे।

Deque<String> deque = new ArrayDeque<>();

        deque.add("Apple");
        deque.addFirst("Orange");
        deque.addLast("Pineapple");
        deque.add("Lemon");

System.out.println(deque.pollFirst()); // Get and remove the first element of the queue
System.out.println(deque.pollLast()); // Get and remove the last element of the queue.
System.out.println(deque);
नारंगी
नींबू
[सेब, अनानस]

दोनों विधियाँ वापस लौटती हैं और कतार से एक मान निकालती हैं।

यहां peekFirst() और peekLast() विधियों का उपयोग करने का एक उदाहरण दिया गया है:

Deque<String> friends = new ArrayDeque<>();

friends.add("John");
friends.add("Rob");
friends.add("Greg");
friends.add("Max");
friends.add("Oliver");

System.out.println("The first element is: " + friends.peekFirst());
System.out.println("The last element is: " + friends.peekLast());

System.out.println(friends);
पहला तत्व है: जॉन
अंतिम तत्व है: ओलिवर
[जॉन, रोब, ग्रेग, मैक्स, ओलिवर]

दोनों विधियां कतार से पहला/अंतिम तत्व लौटाती हैं और उन्हें हटाती नहीं हैं। यदि कतार खाली है, तो अशक्त वापस आ जाएगा।

बहुत अच्छा! आज हमने जावा में कतारों के साथ काम करना सीखा। अब आप जानते हैं कि व्यवहार में उनका उपयोग कैसे करना है।