Kotlin में कार्य कतारों के साथ काम करना: शुरुआती लोगों के लिए पूर्ण गाइड
\n\nकार्य कतारें (टास्क क्यू) मूलभूत डेटा संरचनाओं में से एक हैं, जिनका सामना हर डेवलपर करता है। Kotlin भाषा में, कतारों के साथ काम करना मानक संग्रह लाइब्रेरी के माध्यम से कार्यान्वित किया जाता है, जो उनके उपयोग को सरल और सहज बनाता है। इस लेख में, हम विस्तार से समझेंगे कि कतारें क्या हैं, Kotlin में किस प्रकार की कतारें मौजूद हैं, और व्यवहार में उनका उपयोग कैसे करें। यह सामग्री शुरुआती डेवलपर्स के लिए है जो पहले से ही Kotlin सिंटैक्स की मूल बातों से परिचित हैं।
\n\nकार्य कतार क्या है और इसकी आवश्यकता क्यों है?
\n\nकतार (Queue) एक डेटा संरचना है जो FIFO (First In, First Out — "पहले आया, पहले गया") सिद्धांत पर काम करती है। एक दुकान में लाइन की कल्पना करें: पहला ग्राहक जो लाइन में खड़ा होता है, पहले सेवा प्राप्त करता है। प्रोग्रामिंग में, कतारों का उपयोग डेटा के अनुक्रमिक प्रसंस्करण को व्यवस्थित करने के लिए किया जाता है: कार्य, सर्वर अनुरोध, इनपुट-आउटपुट संचालन, मैसेंजर में संदेश - यह सब अक्सर कतारों के माध्यम से कार्यान्वित किया जाता है।
\n\nKotlin में, कतार को Queue<T> इंटरफ़ेस द्वारा दर्शाया जाता है, जो Collection<T> से विरासत में मिला है। कतार की मुख्य विधियाँ:
- \n
add(element)— कतार के अंत में एक तत्व जोड़ता है (यदि कतार भरी हुई है तो अपवाद फेंकता है); \n offer(element)— कतार के अंत में एक तत्व जोड़ता है (सफलता परtrueलौटाता है, विफलता परfalse); \n remove()— कतार के पहले तत्व को हटाता है और लौटाता है (यदि कतार खाली है तो अपवाद फेंकता है); \n poll()— पहले तत्व को हटाता है और लौटाता है (यदि कतार खाली है तोnullलौटाता है); \n element()— बिना हटाए पहला तत्व लौटाता है (खाली कतार पर अपवाद); \n peek()— बिना हटाए पहला तत्व लौटाता है (यदि कतार खाली है तोnullलौटाता है)। \n
add() और remove() के बजाय offer() और poll() का उपयोग करने की अनुशंसा की जाती है, क्योंकि वे अपवाद नहीं फेंकते हैं और कोड को अधिक सुरक्षित बनाते हैं।
Kotlin में कतारों के मुख्य कार्यान्वयन
\n\nKotlin (Java की तरह) Queue इंटरफ़ेस के कई कार्यान्वयन प्रदान करता है। आइए उनमें से सबसे लोकप्रिय पर विचार करें।
1. LinkedList एक कतार के रूप में
\n\nक्लास LinkedList<T> Queue इंटरफ़ेस को लागू करता है और एक क्लासिक द्विदिश कतार है। यह अधिकांश कार्यों के लिए उपयुक्त है जहां प्रदर्शन पर सख्त प्रतिबंधों की आवश्यकता नहीं होती है।
import java.util.LinkedList\n\nfun main() {\n val queue: Queue<String> = LinkedList()\n \n // कतार में कार्य जोड़ें\n queue.offer("कार्य 1: HTML पार्सिंग")\n queue.offer("कार्य 2: ईमेल भेजना")\n queue.offer("कार्य 3: DB में सहेजना")\n \n println("वर्तमान कतार: $queue")\n \n // कार्यों को संसाधित करें\n while (queue.isNotEmpty()) {\n val task = queue.poll()\n println("संसाधित किया जा रहा है: $task")\n }\n \n println("सभी कार्य संसाधित हो गए। कतार खाली है: ${queue.isEmpty()}")\n}\n\nयह कोड स्ट्रिंग्स की एक कतार बनाता है, तीन कार्य जोड़ता है, और फिर क्रमिक रूप से उन्हें निकालता और प्रदर्शित करता है। ध्यान दें: कार्य उसी क्रम में आउटपुट होते हैं जिसमें उन्हें जोड़ा गया था - यही FIFO सिद्धांत है।
\n\n2. ArrayDeque — एक प्रदर्शनकारी विकल्प
\n\nArrayDeque<T> एक ऐरे-आधारित द्विदिश कतार का कार्यान्वयन है। यह अधिकांश संचालन के लिए LinkedList से तेज़ काम करता है और कम मेमोरी का उपयोग करता है। यदि आपको द्विदिश कतार (Deque) की आवश्यकता नहीं है, तो आप ArrayDeque का उपयोग सामान्य कतार के रूप में कर सकते हैं।
import java.util.ArrayDeque\n\nfun main() {\n val taskQueue: Queue<Int> = ArrayDeque()\n \n // कार्य ID जोड़ें\n for (i