কম্পিউটার টিউটোরিয়াল

জাভা স্ট্যাক ক্লাস: সম্পূর্ণ গাইড

জাভা স্ট্যাক একটি লাস্ট-ইন, ফার্স্ট-আউট (LIFO) ডেটা স্ট্রাকচার। স্ট্যাক থেকে রিমুভ হওয়া প্রথম আইটেম হলো স্ট্যাকে সর্বশেষ অ্যাড করা আইটেম। জাভা স্ট্যাক ভেক্টর ক্লাস এক্সটেন্ড করে।

প্রোগ্রামিং-এ, একটি স্ট্যাক হলো LIFO ডেটা স্ট্রাকচার যা ডেটা স্টোর করতে ব্যবহৃত হয়। স্ট্যাক বিভিন্ন কেসে উপযোগী। উদাহরণস্বরূপ, আপনি যদি একটি লিস্টে সিমেট্রি টেস্ট করতে চান বা লিস্টের অর্ডার রিভার্স করতে চান, তবে স্ট্যাক ব্যবহার করতে পারেন।

জাভা কलेকশন ফ্রেমওয়ার্কে stack নামে একটি ক্লাস আছে যা জাভাতে স্ট্যাক বানাতে ব্যবহৃত হয়। এই টিউটোরিয়ালে জাভাতে স্ট্যাকের বেসিকস, কীভাবে একটি স্ট্যাক তৈরি করবেন, এবং স্ট্যাক ক্লাসের মূল মেথডগুলো আলোচনা করা হবে। উদাহরণের মাধ্যমে স্ট্যাক ক্লাস কীভাবে কাজ করে তা রিইনফোর্স করা হবে।

জাভা স্ট্যাক

জাভা স্ট্যাক এলিমেন্টগুলো লাস্ট-ইন, ফার্স্ট-আউট (LIFO) স্ট্রাকচারে স্টোর করে। এর মানে স্ট্যাকের টপে অ্যাড হওয়া এলিমেন্টটি স্ট্যাক থেকে রিমুভ হওয়া প্রথম এলিমেন্ট হবে।

প্রোগ্রামিং-এ স্ট্যাকের একটি উদাহরণ হলো ওয়েব ব্রাউজারের পেজ কন্ট্রোল ফিচার। আপনি একটি ওয়েব পেজ ভিজিট করলে, আপনার ব্রাউজার এটিকে ভিজিট করা পেজের রেকর্ডে যোগ করে। এই রেকর্ডটি একটি স্ট্যাক।

প্রতিবার আপনি ব্রাউজিং সেশনে একটি নতুন ওয়েব পেজ ভিজিট করলে, আপনার ব্রাউজার ব্রাউজিং স্ট্যাকে একটি নতুন এন্ট্রি যোগ করে। আপনি যদি ভিজিট করা শেষ পেজে ফিরে যেতে চান (last-in), তবে আপনার ব্রাউজার স্ট্যাক থেকে সবচেয়ে সাম্প্রতিক এন্ট্রিটি প্রথমে রিমুভ করবে (first-out)। একটি উদাহরণ স্ট্যাক নিচে দেওয়া হলো:

সাইটের নাম
google.com
nytimes.com
careerkarma.com

এটি আমাদের ব্রাউজিং হিস্টরি স্ট্যাক। আমরা বর্তমানে google.com মেইন পেজে আছি। এর আগে আমরা New York Times মেইন পেজে ছিলাম। তার আগে Career Karma মেইন পেজে ছিলাম।

google.com স্ট্যাকের টপে আছে। google.com সাইট স্ট্যাক থেকে রিমুভ হওয়া প্রথম আইটেম হবে। এটি হয় যখন আমরা ব্যাক অ্যারো বাটন প্রেস করি শেষ ভিজিট করা পেজে ফিরে যেতে।

স্ট্যাকের সাথে কাজ করার সময়, লিস্টের লাস্ট আইটেমকে স্ট্যাকের টপ ধরা হয়। আমাদের ওয়েবসাইট উদাহরণে, google.com সবচেয়ে সাম্প্রতিক ভিজিট করা সাইট, তাই এটি আমাদের স্ট্যাকের টপে আছে।

জাভা স্ট্যাক তৈরি করুন

জাভাতে স্ট্যাক তৈরি করার আগে, আমাদের java.util.Stack প্যাকেজ ইম্পোর্ট করতে হবে। এই প্যাকেজে স্ট্যাক ডেটা স্ট্রাকচার থাকে যা এই টিউটোরিয়ালে ব্যবহার করব।

স্ট্যাক ডেটা স্ট্রাকচার ইম্পোর্ট করার পদ্ধতি:

import java.util.Stack;

স্ট্যাক প্যাকেজ ইম্পোর্ট করার পর আমরা জাভা স্ট্যাক তৈরি করতে পারি। জাভাতে স্ট্যাক তৈরির সিনট্যাক্স:

Stack stack_name = new Stack<>();

জাভা স্ট্যাক সিনট্যাক্সের মূল কম্পোনেন্টগুলো:

  • Stack প্রোগ্রামকে বলে যে আমরা একটি স্ট্যাক ডিক্লেয়ার করতে চাই।
  • DataType হলো আমাদের স্ট্যাক যে টাইপের ডেটা স্টোর করবে।
  • stack_name হলো আমাদের স্ট্যাকের নাম।
  • new Stack<>(); একটি নতুন জাভা স্ট্যাক ইনিশিয়ালাইজ করে।

যদি আমরা books নামে একটি স্ট্যাক তৈরি করতে চাই যা স্ট্রিং স্টোর করবে, তবে কোড:

Stack books = new Stack<>();

আমরা একটি নতুন স্ট্যাক তৈরি করেছি। এই স্ট্যাক লাস্ট-ইন, ফার্স্ট-আউট অর্ডারে ডেটা স্টোর করে।

Deque ক্লাস সম্পর্কে একটি নোট

কিছু প্রোগ্রামার জাভাতে স্ট্যাকের বদলে deque ক্লাস ব্যবহার করতে পছন্দ করেন।

Deques হলো ডাবল-এন্ডেড কিউ। ডিকের স্ট্যাকের ওপর সুবিধা হলো আপনি ডিকের দুটি এন্ড থেকেই আইটেম অ্যাড ও রিমুভ করতে পারেন। স্ট্যাকের সাথে এটি সম্ভব নয়।

যদি আপনি স্ট্যাক-স্পেসিফিক মেথড ব্যবহার করেন (নিচে আলোচনা করা হয়েছে), তবে আপনাকে আপনার কোডে স্ট্যাক ক্লাস ব্যবহার করতে বাধ্য হতে হবে। এটি প্রোগ্রাম স্কেল করা কঠিন করতে পারে। তা সত্ত্বেও, স্ট্যাক জাভাতে ব্যাপকভাবে ব্যবহৃত হয়।

জাভা স্ট্যাক মেথড

জাভা স্ট্যাক ক্লাসে ডেটা ম্যানিপুলেট করার জন্য অনেক মেথড রয়েছে। এই মেথডগুলো দুটি ক্যাটাগরিতে ভাগ করা যায়:

  1. ভেক্টর ক্লাস থেকে ইনহেরিট করা স্ট্যাক মেথড। স্ট্যাক যেসব মেথড অফার করে সেগুলোর প্রথমই ভেক্টর ক্লাস থেকে ইনহেরিট করা। আপনি যদি এই মেথডগুলোর বিষয়ে জানতে চান, "Java vector class" রিসার্চ করুন।
  1. স্ট্যাকের জন্য অনন্য মেথড। স্ট্যাক পাঁচটি অতিরিক্ত মেথড অফার করে যা শুধু এই ক্লাসের জন্য। নিচে সেগুলো আলোচনা করা হলো:
    • push()
    • pop()
    • peek()
    • empty()
    • search()

push() এবং pop() অপারেশনগুলো সবচেয়ে কমনলি ব্যবহৃত। এগুলো আপনাকে স্ট্যাকে আইটেম অ্যাড ও রিমুভ করতে দেয়।

জাভা স্ট্যাকে আইটেম অ্যাড করুন: push()

push() মেথড একটি জাভা স্টাকে আইটেম অ্যাড করে।

push() এক প্যারামিটার গ্রহণ করে: যে আইটেমটি আপনি আপনার স্টকে অ্যাড করতে চান। উদাহরণস্বরূপ, একটি লাইব্রেরির ফিকশন সেকশনের সকল বইয়ের টাইটেল স্টোর করার জন্য একটি স্ট্যাক তৈরি করছি। প্রথম তিনটি বইয়ের টাইটেল অ্যাড করতে নিচের কোড ব্যবহার করতে পারি:

import java.util.Stack; 
class AddBooks { 
    public static void main(String[] args) { 
        Stack books = new Stack<>(); 
        books.push("Pride and Prejudice"); 
        books.push("Nineteen Eighty-Four"); 
        books.push("The Great Gatsby"); 
        System.out.println(books); 
    } 
}

আউটপুট:

[Pride and Prejudice, Nineteen Eighty-Four, The Great Gatsby]

প্রথমে জাভা স্ট্যাক মডিউল ইম্পোর্ট করা হয়েছে। তারপর AddBooks নামে একটি ক্লাস ডিক্লেয়ার করা হয়েছে যেটি আমাদের প্রোগ্রামের কোড ধারণ করে।

পরবর্তী লাইনে, books নামে একটি নতুন স্ট্যাক ইনিশিয়ালাইজ করা হয়েছে যা স্ট্রিং ভ্যালু স্টোর করতে পারে। তারপর push() মেথড ব্যবহার করে তিনটি বইয়ের টাইটেল স্টকে যোগ করা হয়েছে: Pride and Prejudice, Nineteen Eighty-Four, এবং The Great Gatsby। অবশেষে, আমাদের books স্টকে বইয়ের টাইটেলগুলো কনসোলে প্রিন্ট করা হয়েছে।

জাভা স্ট্যাক থেকে আইটেম রিমুভ করুন: pop()

pop() মেথড স্ট্যাকের টপ থেকে একটি এলিমেন্ট রিমুভ করে। এই মেথড রিমুভ করা এলিমেন্টটি রিটার্ন করে।

মান লিজিয়ে আমাদের স্টকে থেকে The Great Gatsby এন্ট্রিটি রিমুভ করতে চাই, যা সর্বশেষ ইনপুট করা বইয়ের টাইটেল। আমরা উপরের প্রোগ্রামে নিচের কোড যোগ করতে পারি:

class RemoveBooks { 
    public static void main(String[] args) { 
        Stack books = new Stack<>(); 
        books.push("Pride and Prejudice"); 
        books.push("Nineteen Eighty-Four"); 
        books.push("The Great Gatsby"); 
        String removed_book = books.pop(); 
        System.out.println("Books: " + books); 
        System.out.println("Removed book: " + removed_book); 
    } 
}

আউটপুট:

Books: [Pride and Prejudice, Nineteen Eighty-Four] Removed book: The Great Gatsby

এই উদাহরণে, আমাদের কোড স্ট্যাকের টপ থেকে আইটেমটি রিমুভ করে।

স্ট্যাকের টপে থাকা আইটেমটি The Great Gatsby। তারপর আমাদের প্রোগ্রাম কনসোলে Books: প্রিফিক্স দিয়ে রিভাইজড বইয়ের লিস্ট প্রিন্ট করে। রিমুভ করা বইয়ের টাইটেল Removed book: প্রিফিক্স দিয়ে কনসোলে ডিসপ্লে হয়।

স্ট্যাকে প্রথম অবজেক্ট রিট্রিভ করুন: peek()

স্ট্যাকের সাথে কাজ করার সময়, আপনি স্ট্যাকের টপে থাকা আইটেমটি রিট্রিভ করতে চাইতে পারেন। সেখানে peek() মেথড কাজে লাগে। peek() কোনো প্যারামিটার নেয় না। এটি স্ট্যাকের টপে পিক করে এবং যা পায় সেটি রিটার্ন করে।

মান লিজিয়ে, The Great Gatsby রিমুভ করার পর আমরা জানতে চাই আমাদের স্টকের টপে কী আছে। নিচের কোড দিয়ে তা করা যায়:

import java.util.Stack; 
class FindTopBook { 
    public static void main(String[] args) { 
        Stack books = new Stack<>(); 
        books.push("Pride and Prejudice"); 
        books.push("Nineteen Eighty-Four"); 
        String top_book = books.peek(); 
        System.out.println("Book at top of stack: " + top_book); 
    } 
}

আউটপুট:

Book at top of stack: Nineteen Eighty-Four.

আমাদের স্টকে দুটি আইটেম আছে। Nineteen Eighty-Four স্টকের টপে আছে, তাই peek() মেথড ব্যবহার করলে প্রোগ্রাম সেই বইয়ের টাইটেল রিটার্ন করে।

স্ট্যাক খালি কিনা চেক করুন: empty()

empty() মেথড নির্ধারণ করে একটি স্ট্যাক খালি কিনা।

উদাহরণস্বরূপ, আমরা চেক করতে চাই আমাদের books স্ট্যাক খালি কিনা। আমরা স্টকের ডেটার সাথে খেলা করেছি। এখন নিশ্চিত নই স্টকে আরও বইয়ের টাইটেল আছে কিনা।

নিচের কোড দিয়ে চেক করা যায়:

import java.util.Stack; 
class CheckBooksEmpty { 
    public static void main(String[] args) { 
        Stack books = new Stack<>(); 
        books.push("Pride and Prejudice"); 
        books.push("Nineteen Eighty-Four"); 
        String is_empty = books.empty(); 
        System.out.println("Is the book stack empty? " + is_empty); 
    } 
}

আউটপুট:

Is the book stack empty? false

আমাদের books স্টকে দুটি ভ্যালু আছে, তাই এটি খালি নয়। সেজন্যে books.empty() রিটার্ন করে: false।

একটি এলিমেন্ট সার্চ করুন: search()

search() মেথড একটি স্টকে এলিমেন্ট সার্চ করে।

search() এক প্যারামিটার নেয়: যে আইটেমের জন্য আপনি সার্চ করতে চান তার নাম। এটি সেই আইটেমের স্টকে পজিশন রিটার্ন করে।

মান লিজিয়ে, আমাদের বইয়ের টাইটেল স্টকে Pride and Prejudice-এর পজিশন জানতে চাই। নিচের কোড দিয়ে তা করা যায়:

import java.util.Stack; 
class FindPrideBookPosition { 
    public static void main(String[] args) { 
        Stack books = new Stack<>(); 
        books.push("Pride and Prejudice"); 
        books.push("Nineteen Eighty-Four"); 
        String find_book = books.search("Pride and Prejudice"); 
        System.out.println("Position of 'Pride and Prejudice': " + find_book); 
    } 
}

আউটপুট:

Position of 'Pride and Prejudice': 1.

স্টকে প্রথম আইটেমের পজিশন নম্বর 1। যেহেতু Pride and Prejudice স্টকের প্রথম আইটেম, প্রোগ্রাম ১ রিটার্ন করে।

উপসংহার

জাভা স্ট্যাক ক্লাস LIFO স্ট্রাকচার সহ স্ট্যাক তৈরি করতে ব্যবহৃত হয়। এই টিউটোরিয়ালে জাভা স্ট্যাকের বেসিকস এবং কীভাবে একটি স্ট্যাক তৈরি করবেন তা আলোচনা করা হয়েছে। আমরা স্ট্যাকের কন্টেন্ট রিট্রিভ ও ম্যানিপুলেট করার জন্য ব্যবহৃত পাঁচটি মেথড নিয়ে আলোচনা করেছি।

এখন আপনার কাছে পেশাদার জাভা ডেভেলপারের মতো স্ট্যাক নিয়ে কাজ করার জ্ঞান আছে। জাভা প্রোগ্রামিং ল্যাঙ্গুয়েজ সম্পর্কে আরও জানতে আমাদের "How to Learn Java" গাইড পড়ুন।

  1. জাভাতে ফাইনাল ক্লাস

  2. জাভাতে final কীওয়ার্ড

  3. জাভাতে super কীওয়ার্ড

  4. জাভাতে এগ리게েশন