বেশিরভাগ মানুষের জন্য, "সারি" শব্দটি খুব কম আনন্দদায়ক মেলামেশার কথা মনে করে। কিন্তু আজ আমরা বিভিন্ন সারি সম্পর্কে কথা বলছি — জাভা সারি। জাভাতে, একটি সারি এমন কিছু যা সারি ইন্টারফেসের উত্তরাধিকারসূত্রে প্রাপ্ত হয়, যা কালেকশন ইন্টারফেসকে প্রসারিত করে । এর মানে হল যে সারিগুলিকে সংগ্রহের মতো বিবেচনা করা যেতে পারে।

জাভাতে সারি দুটি অপারেটিং নীতি সমর্থন করে: FIFO এবং LIFO

FIFO (ফার্স্ট ইন, ফার্স্ট আউট) নীতি একটি নিয়মিত সারিকে পরিচালনা করে — সারিতে যোগ করা প্রথম উপাদানটি এটি ছেড়ে চলে যায়

LIFO (লাস্ট ইন, ফার্স্ট আউট) নীতি একটি স্ট্যাকের আচরণকে বর্ণনা করে — সারিতে যোগ করা শেষ উপাদানটি প্রথমে এটি ছেড়ে যায় উদাহরণস্বরূপ, আপনি এইভাবে কার্ডের ডেকের সাথে কাজ করেন: আপনি ডেকের নীচে না পৌঁছানো পর্যন্ত আপনি একবারে উপরের একটি থেকে কার্ডগুলি সরিয়ে ফেলবেন।

জাভাতে সারি অনুক্রমটি এইরকম দেখায়:

এখানে আপনি দেখতে পাচ্ছেন যে সারিতে 3টি বাস্তবায়ন ক্লাস রয়েছে: LinkedList , ArrayDeque এবং PriorityQueueLinkedList এবং ArrayDeque সরাসরি উত্তরাধিকারী হয় Queue নয় , কিন্তু Deque

Deque হল একটি ইন্টারফেস যা জাভা 6-এ যোগ করা হয়েছিল। এতে বেশ কয়েকটি পদ্ধতি রয়েছে যা সারিগুলির জন্য দরকারী এবং একটি সারিকে ডাবল-এন্ডেড (বা দ্বিমুখী) সারি হিসাবে কাজ করতে দেয়। তার মানে এটা ফিফোএবংLIFOহতে পারে।

Deque ইন্টারফেসের দুটি বংশধরের মধ্যে একটি হল ArrayDeque । এটি একটি দ্বিগুণ-সম্পন্ন সারি সমর্থন করে যা আপনাকে উভয় প্রান্ত থেকে উপাদানগুলি সন্নিবেশ ও সরাতে দেয়। এটি একটি গতিশীল অ্যারে যা স্বয়ংক্রিয়ভাবে আকারে বৃদ্ধি পায়।

এছাড়াও একটি PriorityQueue ক্লাস রয়েছে , যা সারির একটি সরাসরি বংশধর : এটি Deque বাস্তবায়নকারী ক্লাসের চেয়ে ভিন্নভাবে আচরণ করে ।

PriorityQueue হল একটি অগ্রাধিকার সারি যা উপাদানগুলিকে তাদের স্বাভাবিক ক্রম অনুসারে ডিফল্টভাবে সংগঠিত করে। এখানে বাছাই তুলনামূলক এবং তুলনাকারী ইন্টারফেস ব্যবহার করে। নীতিটি TreeSet বা TreeMap- এর মতোই- যে ক্লাসগুলি তুলনাযোগ্য ইন্টারফেস ব্যবহার করে এবং তাদের নিজস্ব সাজানোর ক্রম থাকে।

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 ইন্টারফেস সারি পদ্ধতির উত্তরাধিকারী হয় এবং এর নিজস্ব বেশ কয়েকটি আকর্ষণীয় পদ্ধতি যোগ করে :

void addFirst(E obj) সারির সামনে অবজেক্ট উপাদান যোগ করে
অকার্যকর addLast(E obj) সারির শেষে অবজেক্ট এলিমেন্ট যোগ করে
ই গেট ফার্স্ট() সারি থেকে প্রথম উপাদান প্রদান করে
ই গেট লাস্ট() সারি থেকে শেষ উপাদান প্রদান করে
বুলিয়ান অফার ফার্স্ট(E obj) সারির সামনে বস্তু উপাদান যোগ করে , এবং উপাদান যোগ করা হলে সত্য ফিরে আসে। অন্যথায়, মিথ্যা ফেরত দেয় ।
বুলিয়ান অফার শেষ (E obj) সারির শেষে অবজেক্ট এলিমেন্ট যোগ করে এবং এলিমেন্ট যোগ করা হলে true রিটার্ন করে। অন্যথায়, মিথ্যা ফেরত দেয় ।
ই рор() সারি থেকে প্রথম উপাদানটি পায় এবং এটি সরিয়ে দেয়
অকার্যকর ধাক্কা (E obj) সারির সামনে অবজেক্ট উপাদান যোগ করে
ই পিক ফার্স্ট() সারি থেকে প্রথম উপাদানটি ফেরত দেয় (কিন্তু অপসারণ করে না)
ই পিক লাস্ট() সারি থেকে শেষ উপাদানটি ফেরত দেয় (কিন্তু অপসারণ করে না)
ই পোল ফার্স্ট() সারি থেকে প্রথম উপাদানটি ফিরিয়ে দেয় এবং সরিয়ে দেয়। কোনো উপাদান না থাকলে শূন্য দেয় ।
ই পোল লাস্ট() সারি থেকে শেষ উপাদানটি ফিরিয়ে দেয় এবং সরিয়ে দেয়। কোনো উপাদান না থাকলে শূন্য দেয় ।
ই রিমুভ লাস্ট() সারির প্রথম উপাদানটি ফিরিয়ে দেয় এবং সরিয়ে দেয়। কোন উপাদান না থাকলে একটি ব্যতিক্রম নিক্ষেপ করে।
ই রিমুভ ফার্স্ট() সারির শেষ উপাদানটি ফিরিয়ে দেয় এবং সরিয়ে দেয়। কোন উপাদান না থাকলে একটি ব্যতিক্রম নিক্ষেপ করে।
বুলিয়ান রিমুভ ফার্স্ট অকারেন্স (অবজেক্ট অবজেক্ট) সারি থেকে obj এর প্রথম ঘটনাটি সরিয়ে দেয়
বুলিয়ান রিমুভ লাস্ট অকারেন্স (অবজেক্ট অবজেক্ট) সারি থেকে obj এর শেষ ঘটনাটি সরিয়ে দেয়

আসুন এখন অনুশীলনে এই পদ্ধতিগুলির কয়েকটি দেখুন।

প্রথমে, একটি সারিতে একটি উপাদান যোগ করা যাক:

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);

এই কোডটি চালালে, আমরা পাই:

কমলা
আপেল

[আনারস, লেবু]

pop() এবং poll() এর মধ্যে পার্থক্য হল যে তালিকাটি খালি থাকলে pop() একটি NoSuchElementException নিক্ষেপ করবে , কিন্তু poll() null ফেরত দেবে ।

এখন আমরা pollFirst() এবং pollLast() পদ্ধতি বিবেচনা করব।

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);
প্রথম উপাদান হল: জন
শেষ উপাদান হল: অলিভার
[জন, রব, গ্রেগ, ম্যাক্স, অলিভার]

উভয় পদ্ধতিই সারি থেকে প্রথম/শেষ উপাদান ফিরিয়ে দেয় এবং সেগুলিকে সরিয়ে দেয় না। সারি খালি থাকলে, নাল ফেরত দেওয়া হবে।

সাবাশ! আজ আমরা শিখলাম কিভাবে জাভাতে সারি দিয়ে কাজ করতে হয়। এখন আপনি অনুশীলনে তাদের ব্যবহার করতে জানেন।