Java Collections Framework Examples

Java Technologies - জাভা উদাহরন (Java  Examples)
199
199

Java Collections Framework একটি শক্তিশালী গ্রন্থাগার যা বিভিন্ন ধরনের ডেটা স্ট্রাকচার (যেমন লিস্ট, সেট, ম্যাপ) এবং তাদের সাথে কাজ করার জন্য প্রয়োজনীয় ক্লাস এবং ইন্টারফেস প্রদান করে। এই ফ্রেমওয়ার্কের মাধ্যমে ডেটা স্টোর এবং প্রসেসিং অনেক সহজ এবং কার্যকরী হয়ে ওঠে।

এখানে আমি কিছু Java Collections Framework এর সাধারণ উদাহরণ দেখাবো যেখানে বিভিন্ন ডেটা স্ট্রাকচার ব্যবহার করা হয়েছে।

Java Collections Framework Examples:

1. ArrayList Example:

ArrayList হল একটি List ইন্টারফেসের বাস্তবায়ন যা অর্ডার রাখা এবং ডুপ্লিকেট উপাদান সমর্থন করে। এটি dynamic array হিসেবে কাজ করে।

import java.util.ArrayList;

public class ArrayListExample {
    public static void main(String[] args) {
        // ArrayList তৈরি
        ArrayList<String> list = new ArrayList<>();

        // Elements যোগ করা
        list.add("Apple");
        list.add("Banana");
        list.add("Orange");

        // Elements প্রদর্শন করা
        System.out.println("List: " + list);

        // List থেকে একটি উপাদান সরানো
        list.remove("Banana");
        System.out.println("After removing Banana: " + list);

        // List এর সাইজ চেক করা
        System.out.println("List size: " + list.size());

        // List এর মধ্যে একটি উপাদান চেক করা
        if (list.contains("Apple")) {
            System.out.println("Apple is in the list.");
        }
    }
}

Output:

List: [Apple, Banana, Orange]
After removing Banana: [Apple, Orange]
List size: 2
Apple is in the list.

2. HashSet Example:

HashSet হল একটি Set ইন্টারফেসের বাস্তবায়ন যা অর্ডার রক্ষা করে না এবং ডুপ্লিকেট উপাদান সমর্থন করে না। এটি সাধারণত unique মান সংরক্ষণ করতে ব্যবহৃত হয়।

import java.util.HashSet;

public class HashSetExample {
    public static void main(String[] args) {
        // HashSet তৈরি
        HashSet<String> set = new HashSet<>();

        // Elements যোগ করা
        set.add("Apple");
        set.add("Banana");
        set.add("Orange");
        set.add("Apple"); // Duplicate element will not be added

        // Set প্রদর্শন করা
        System.out.println("Set: " + set);

        // Set এর মধ্যে একটি উপাদান চেক করা
        if (set.contains("Orange")) {
            System.out.println("Orange is in the set.");
        }

        // Set থেকে একটি উপাদান সরানো
        set.remove("Banana");
        System.out.println("After removing Banana: " + set);
    }
}

Output:

Set: [Apple, Banana, Orange]
Orange is in the set.
After removing Banana: [Apple, Orange]

3. HashMap Example:

HashMap হল একটি Map ইন্টারফেসের বাস্তবায়ন যা কীগুলির সাথে মান (value) সংরক্ষণ করে। এটি null কী এবং মান সমর্থন করে, এবং কোন অর্ডার রক্ষা করে না।

import java.util.HashMap;

public class HashMapExample {
    public static void main(String[] args) {
        // HashMap তৈরি
        HashMap<Integer, String> map = new HashMap<>();

        // Key-value pair যোগ করা
        map.put(1, "Apple");
        map.put(2, "Banana");
        map.put(3, "Orange");

        // Map প্রদর্শন করা
        System.out.println("Map: " + map);

        // Map থেকে একটি মান বের করা
        System.out.println("Value for key 2: " + map.get(2));

        // Map থেকে একটি key-value pair সরানো
        map.remove(1);
        System.out.println("After removing key 1: " + map);

        // Map এর মধ্যে একটি key চেক করা
        if (map.containsKey(3)) {
            System.out.println("Key 3 is present in the map.");
        }
    }
}

Output:

Map: {1=Apple, 2=Banana, 3=Orange}
Value for key 2: Banana
After removing key 1: {2=Banana, 3=Orange}
Key 3 is present in the map.

4. LinkedList Example:

LinkedList হল একটি List ইন্টারফেসের বাস্তবায়ন যা ডাবল লিঙ্কড লিস্ট হিসেবে কাজ করে। এটি ইনসার্ট এবং ডিলিট অপারেশনের জন্য দ্রুত।

import java.util.LinkedList;

public class LinkedListExample {
    public static void main(String[] args) {
        // LinkedList তৈরি
        LinkedList<String> list = new LinkedList<>();

        // Elements যোগ করা
        list.add("Apple");
        list.add("Banana");
        list.add("Orange");

        // Elements প্রদর্শন করা
        System.out.println("LinkedList: " + list);

        // List এর প্রথম এবং শেষ উপাদান দেখানো
        System.out.println("First element: " + list.getFirst());
        System.out.println("Last element: " + list.getLast());

        // List থেকে একটি উপাদান সরানো
        list.removeFirst();
        System.out.println("After removing first element: " + list);

        list.removeLast();
        System.out.println("After removing last element: " + list);
    }
}

Output:

LinkedList: [Apple, Banana, Orange]
First element: Apple
Last element: Orange
After removing first element: [Banana, Orange]
After removing last element: [Banana]

5. PriorityQueue Example:

PriorityQueue হল একটি Queue ইন্টারফেসের বাস্তবায়ন যা একটি প্রাথমিকতার ভিত্তিতে উপাদানকে সাজায়।

import java.util.PriorityQueue;

public class PriorityQueueExample {
    public static void main(String[] args) {
        // PriorityQueue তৈরি
        PriorityQueue<String> queue = new PriorityQueue<>();

        // Elements যোগ করা
        queue.add("Apple");
        queue.add("Banana");
        queue.add("Orange");

        // PriorityQueue থেকে উপাদান বের করা (Minimum element first)
        System.out.println("Queue: " + queue);

        // Remove elements based on priority
        while (!queue.isEmpty()) {
            System.out.println("Removed: " + queue.poll());
        }
    }
}

Output:

Queue: [Apple, Banana, Orange]
Removed: Apple
Removed: Banana
Removed: Orange

Java Collections Framework ব্যবহার করলে আপনি বিভিন্ন ধরনের ডেটা স্ট্রাকচার যেমন List, Set, Map, Queue ইত্যাদি ব্যবহারের মাধ্যমে আপনার প্রোগ্রামকে আরও মডুলার, দক্ষ এবং সহজে পরিচালনাযোগ্য করতে পারবেন। প্রতিটি ডেটা স্ট্রাকচারের নিজস্ব সুবিধা এবং কার্যকারিতা আছে এবং Collections API আপনাকে এগুলো ব্যবহারের জন্য সরঞ্জাম প্রদান করে।

Content added By

ArrayList Example: ArrayList এর মাধ্যমে Dynamic Array তৈরি

74
74

ArrayList হলো Java Collection Framework এর একটি অংশ, যা একটি dynamic array তৈরি করে, যেখানে ফাইলের আকার স্বয়ংক্রিয়ভাবে বাড়ানো বা কমানো যায়। এটি একটি resizable array যা প্রাথমিকভাবে ফিক্সড সাইজের অ্যারের মত কাজ করে, কিন্তু এর মধ্যে ফাইলের সাইজ পরিবর্তন করা যায় এবং এটি null values এবং ডুপ্লিকেট মান অনুমোদন করে।

ArrayList উদাহরণ

এখানে একটি উদাহরণ দেওয়া হলো যা দেখাবে কিভাবে ArrayList ব্যবহার করে ডায়নামিক অ্যারে তৈরি করা যায় এবং এর মাধ্যমে ডেটা যোগ, মুছা এবং অ্যাক্সেস করা যায়।

import java.util.ArrayList;

public class ArrayListExample {
    public static void main(String[] args) {
        // ArrayList তৈরি করা
        ArrayList<String> fruits = new ArrayList<>();

        // ArrayList-এ উপাদান যোগ করা
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Cherry");
        fruits.add("Mango");

        // ArrayList-এ উপাদান প্রিন্ট করা
        System.out.println("ArrayList elements:");
        for (String fruit : fruits) {
            System.out.println(fruit);
        }

        // ArrayList এর আকার প্রিন্ট করা
        System.out.println("\nArrayList size: " + fruits.size());

        // নির্দিষ্ট উপাদান অ্যাক্সেস করা (index দ্বারা)
        System.out.println("\nElement at index 2: " + fruits.get(2));

        // ArrayList-এ একটি উপাদান মুছে ফেলা
        fruits.remove("Banana"); // "Banana" মুছে ফেলা

        // ArrayList-এ উপাদান প্রিন্ট করা পরবর্তী পরিবর্তনের পর
        System.out.println("\nArrayList after removal:");
        for (String fruit : fruits) {
            System.out.println(fruit);
        }

        // ArrayList-এ একটি উপাদান পরিবর্তন করা
        fruits.set(1, "Papaya"); // index 1 এ "Mango" পরিবর্তন করে "Papaya" রাখা

        // পরিবর্তিত ArrayList প্রিন্ট করা
        System.out.println("\nArrayList after modification:");
        for (String fruit : fruits) {
            System.out.println(fruit);
        }

        // ArrayList-এ নির্দিষ্ট উপাদান আছে কিনা চেক করা
        if (fruits.contains("Apple")) {
            System.out.println("\nApple is present in the ArrayList.");
        }

        // ArrayList পরিষ্কার করা
        fruits.clear();
        System.out.println("\nArrayList after clearing: " + fruits);
    }
}

কোড ব্যাখ্যা:

  1. ArrayList তৈরি করা:
    • ArrayList<String> fruits = new ArrayList<>(); — এখানে ArrayList তৈরি করা হয়েছে যা শুধুমাত্র String ধরনের ডেটা ধারণ করবে।
  2. ডেটা যোগ করা:
    • fruits.add("Apple");.add() মেথড ব্যবহার করে বিভিন্ন মান অ্যারে লিস্টে যোগ করা হয়েছে।
  3. ডেটা প্রিন্ট করা:
    • for লুপ ব্যবহার করে ArrayList এর সকল উপাদান প্রিন্ট করা হয়েছে।
    • fruits.size() দিয়ে ArrayList এর আকার (এখানে 4) প্রিন্ট করা হয়েছে।
  4. ডেটা অ্যাক্সেস:
    • fruits.get(2);.get() মেথড ব্যবহার করে নির্দিষ্ট ইনডেক্স (এখানে 2) থেকে উপাদান অ্যাক্সেস করা হয়েছে। এখানে Cherry প্রিন্ট হবে।
  5. ডেটা মুছা:
    • fruits.remove("Banana");.remove() মেথড ব্যবহার করে "Banana" উপাদানটি মুছে ফেলা হয়েছে।
  6. ডেটা পরিবর্তন:
    • fruits.set(1, "Papaya");.set() মেথড ব্যবহার করে ইনডেক্স 1 এ থাকা মান পরিবর্তন করে "Papaya" রাখা হয়েছে।
  7. ডেটা চেক করা:
    • fruits.contains("Apple");.contains() মেথড ব্যবহার করে ArrayList এ নির্দিষ্ট মান ("Apple") আছে কিনা চেক করা হয়েছে।
  8. ArrayList পরিষ্কার করা:
    • fruits.clear();.clear() মেথড ব্যবহার করে ArrayList এর সকল উপাদান মুছে ফেলা হয়েছে।

আউটপুট:

ArrayList elements:
Apple
Banana
Cherry
Mango

ArrayList size: 4

Element at index 2: Cherry

ArrayList after removal:
Apple
Cherry
Mango

ArrayList after modification:
Apple
Papaya
Mango

Apple is present in the ArrayList.

ArrayList after clearing: []

ArrayList এর সুবিধা:

  1. Dynamic Size: ArrayList এর সাইজ অটোমেটিক্যালি বাড়ানো বা কমানো যায়। এটি ফিক্সড সাইজের অ্যারের তুলনায় বেশি ফ্লেক্সিবল।
  2. Efficient Element Insertion and Removal: ArrayList তে উপাদান ইনসার্ট এবং রিমুভ করা সহজ এবং দ্রুত।
  3. Versatility: ArrayList অনেক ধরনের ডেটা সমর্থন করে (যেমন: Strings, Integers, Custom Objects, ইত্যাদি)।
  4. Built-in Methods: Java ArrayList ক্লাস অনেক বিল্ট-ইন মেথড সরবরাহ করে যেমন .add(), .remove(), .contains(), .get(), .size(), .clear() ইত্যাদি, যা ডেটার ম্যানিপুলেশন সহজ করে তোলে।

Java তে ArrayList ব্যবহার করে dynamic arrays তৈরি করা এবং তাদের উপাদান ম্যানিপুলেট করা খুবই সহজ। এটি একটি অত্যন্ত কার্যকরী ডেটা স্ট্রাকচার যেটি দ্রুত এবং ফ্লেক্সিবলভাবে ডেটা ম্যানিপুলেট করতে সাহায্য করে।

Content added By

HashMap Example: Key-value Pair ভিত্তিক Data Storage

149
149

Java তে HashMap হল একটি ডেটা স্ট্রাকচার যা key-value pair ভিত্তিতে ডেটা সংরক্ষণ করে। HashMap হলো একটি Map ইন্টারফেসের বাস্তবায়ন যা ডেটাকে একটি নির্দিষ্ট key এর সাথে value যুক্ত করে রাখে। এটি null কী এবং মান অনুমোদিত করে, এবং ডেটা দ্রুত অ্যাক্সেস করতে hashing ব্যবহার করে।

HashMap ডেটা স্টোরেজের মূল সুবিধা:

  1. অর্ডার garantied নয়: HashMap ফাইলের মধ্যে ডেটা সংরক্ষণ করলে ফাইলের অর্ডার নিশ্চিত করা হয় না।
  2. O(1) টাইম কমপ্লেক্সিটি: ডেটা অ্যাক্সেস করার সময় সাধারণত সময় O(1) হয়, অর্থাৎ খুব দ্রুত ডেটা পাওয়া যায়।
  3. Key-Value Pair: HashMap ডেটা একটি কী এবং তার সাথে যুক্ত মান (value) এর মাধ্যমে সংরক্ষণ করে।

Java HashMap Example:

import java.util.HashMap;

public class HashMapExample {
    public static void main(String[] args) {
        // HashMap তৈরি করা (key: String, value: Integer)
        HashMap<String, Integer> studentGrades = new HashMap<>();

        // HashMap এ ডেটা যোগ করা
        studentGrades.put("Alice", 85);
        studentGrades.put("Bob", 92);
        studentGrades.put("Charlie", 88);
        studentGrades.put("David", 95);

        // HashMap থেকে ডেটা এক্সট্রাক্ট করা (key এর মাধ্যমে)
        System.out.println("Alice's grade: " + studentGrades.get("Alice"));
        System.out.println("Bob's grade: " + studentGrades.get("Bob"));

        // HashMap এ কোনো কী আছে কিনা চেক করা
        if (studentGrades.containsKey("Charlie")) {
            System.out.println("Charlie exists in the map with grade: " + studentGrades.get("Charlie"));
        }

        // HashMap থেকে একটি নির্দিষ্ট কী-ভ্যালু জোড়া মুছে ফেলা
        studentGrades.remove("David");

        // সমস্ত কী এবং ভ্যালু প্রদর্শন করা
        System.out.println("\nUpdated Student Grades:");
        for (String key : studentGrades.keySet()) {
            System.out.println(key + ": " + studentGrades.get(key));
        }

        // HashMap এর আকার
        System.out.println("\nTotal students: " + studentGrades.size());
    }
}

কোড ব্যাখ্যা:

  1. HashMap তৈরি:
    • HashMap<String, Integer> studentGrades = new HashMap<>(); — এখানে একটি HashMap তৈরি করা হয়েছে যার key হল String (যেমন ছাত্রের নাম), এবং value হল Integer (যেমন ছাত্রের গ্রেড)।
  2. put() মেথড দিয়ে ডেটা যোগ করা:
    • studentGrades.put("Alice", 85);put() মেথডের মাধ্যমে key (যেমন, "Alice") এবং value (যেমন, 85) যোগ করা হয়েছে।
  3. get() মেথড দিয়ে ডেটা অ্যাক্সেস করা:
    • studentGrades.get("Alice");get() মেথড ব্যবহার করে একটি নির্দিষ্ট কী থেকে মান পাওয়া যায়।
  4. containsKey() মেথড দিয়ে কী চেক করা:
    • studentGrades.containsKey("Charlie");containsKey() মেথড দ্বারা চেক করা হয় যে, "Charlie" কীটি HashMap-এ আছে কিনা।
  5. remove() মেথড দিয়ে ডেটা মুছে ফেলা:
    • studentGrades.remove("David");remove() মেথড ব্যবহার করে "David" কী-টি মুছে ফেলা হয়েছে।
  6. keySet() মেথড দিয়ে সমস্ত কী এবং মান প্রিন্ট করা:
    • studentGrades.keySet() — এই মেথডটি সমস্ত কী সংগ্রহ করে, এবং আমরা get(key) ব্যবহার করে প্রতিটি কী-এর মান অ্যাক্সেস করতে পারি।
  7. size() মেথড দিয়ে HashMap এর আকার পাওয়া:
    • studentGrades.size();size() মেথড দ্বারা HashMap-এর মোট উপাদানের সংখ্যা পাওয়া যায়।

আউটপুট:

Alice's grade: 85
Bob's grade: 92
Charlie exists in the map with grade: 88

Updated Student Grades:
Alice: 85
Bob: 92
Charlie: 88

Total students: 3

HashMap এর প্রধান বৈশিষ্ট্য:

  1. Key-Value Pair:
    • HashMap ডেটা key-value pair হিসেবে সংরক্ষণ করে। এখানে key হল ইউনিক এবং value হল তার সাথে সংশ্লিষ্ট মান।
  2. Order:
    • HashMap ফাইলের মধ্যে সংরক্ষিত ডেটার অর্ডার guaranteed নয়। অর্থাৎ, ডেটা কোনো নির্দিষ্ট ক্রমে থাকবে না।
  3. Null Key and Values:
    • HashMap এ একটি null কী এবং অনেকগুলো null ভ্যালু থাকতে পারে। তবে, একটি null কী একটিই থাকতে পারে।
  4. Performance:
    • HashMap দ্রুত কাজ করে কারণ এটি hashing ব্যবহার করে ডেটা খুঁজে বের করতে, অ্যাক্সেস করতে এবং সংরক্ষণ করতে।

HashMap এর সুবিধা:

  1. সহজ অ্যাক্সেস: HashMap দ্বারা দ্রুতভাবে key এর মাধ্যমে value এক্সেস করা যায়। এটি সাধারণত O(1) টাইম কমপ্লেক্সিটি প্রদান করে।
  2. ডাইনামিক সাইজ: HashMap ফাইলের সাইজ অ্যাড বা রিমুভ করার সাথে সাথে স্বয়ংক্রিয়ভাবে পরিবর্তন হয়।
  3. ফ্লেক্সিবল: এটি null কী এবং ভ্যালু সমর্থন করে এবং ইচ্ছেমতো ডেটা স্টোর করতে পারে।

HashMap হল Java-তে key-value pair ভিত্তিক ডেটা স্টোরেজের একটি শক্তিশালী এবং দক্ষ পদ্ধতি। এটি দ্রুত ডেটা অ্যাক্সেস, মডিফিকেশন, এবং সন্ধান করার জন্য অত্যন্ত কার্যকরী। Java-তে HashMap ব্যবহার করে ডেটার স্থায়ী সংরক্ষণ, অনুসন্ধান এবং সঞ্চালন করা সহজ এবং দ্রুত হয়।

Content added By

HashSet এবং TreeSet Example: Unique Elements এর সংগ্রহ এবং Sorted Collection

94
94

HashSet এবং TreeSet হল Java Collections Framework এর দুইটি জনপ্রিয় Set ইন্টারফেসের বাস্তবায়ন। উভয়ের মধ্যে মূল পার্থক্য হল, HashSet এলিমেন্টগুলিকে যেভাবে আসে তেমনভাবে রাখে, অর্থাৎ কোন নির্দিষ্ট অর্ডারে রাখে না, তবে TreeSet এলিমেন্টগুলিকে স্বাভাবিক ক্রম (natural order) বা আপনার দেওয়া কাস্টম কম্প্যারেটরের ভিত্তিতে সাজায়।

1. HashSet Example (Unique Elements এর সংগ্রহ)

HashSet একটি সেট যা ডুপ্লিকেট এলিমেন্ট সমর্থন করে না এবং এলিমেন্টগুলোকে কোন নির্দিষ্ট অর্ডারে রাখে না।

উদাহরণ: HashSet (Unique Elements)
import java.util.HashSet;

public class HashSetExample {
    public static void main(String[] args) {
        // HashSet তৈরি করা
        HashSet<String> set = new HashSet<>();

        // HashSet এ কিছু এলিমেন্ট যোগ করা
        set.add("Apple");
        set.add("Banana");
        set.add("Orange");
        set.add("Apple"); // Duplicate element, this will be ignored

        // HashSet এর এলিমেন্ট প্রিন্ট করা
        System.out.println("HashSet Elements: " + set);
    }
}

আউটপুট:

HashSet Elements: [Apple, Banana, Orange]

ব্যাখ্যা:

  • set.add("Apple");: প্রথমবার Apple যোগ করা হবে, কিন্তু পরবর্তীবার ডুপ্লিকেট হিসেবে যোগ হওয়া Apple উপেক্ষা করা হবে।
  • HashSet ডুপ্লিকেট এলিমেন্টগুলি অস্বীকার করে এবং এলিমেন্টগুলির মধ্যে কোনো নির্দিষ্ট অর্ডার বজায় রাখে না। এটি এলিমেন্টগুলি এলোমেলোভাবে প্রিন্ট করে।

2. TreeSet Example (Sorted Collection)

TreeSet একটি Sorted Set যা ইনপুট এলিমেন্টগুলিকে প্রাক-নির্ধারিত ক্রমে সাজিয়ে রাখে (যেমন অ্যাসেন্ডিং বা ডেসেন্ডিং অর্ডার)। এটি Natural Ordering বা কাস্টম Comparator ব্যবহার করে সাজানো হয়।

উদাহরণ: TreeSet (Sorted Collection)
import java.util.TreeSet;

public class TreeSetExample {
    public static void main(String[] args) {
        // TreeSet তৈরি করা
        TreeSet<String> set = new TreeSet<>();

        // TreeSet এ কিছু এলিমেন্ট যোগ করা
        set.add("Banana");
        set.add("Apple");
        set.add("Orange");
        set.add("Mango");

        // TreeSet এর এলিমেন্ট প্রিন্ট করা
        System.out.println("TreeSet Elements: " + set);
    }
}

আউটপুট:

TreeSet Elements: [Apple, Banana, Mango, Orange]

ব্যাখ্যা:

  • TreeSet এলিমেন্টগুলোকে তাদের প্রাক-নির্ধারিত অর্ডার (এ্যাসেন্ডিং অর্ডারে) সাজিয়ে রাখে।
  • এখানে, Apple, Banana, Mango, Orange সোজা অর্ডারে সাজানো হয়েছে।

3. TreeSet এবং HashSet এর মধ্যে পার্থক্য:

বৈশিষ্ট্যHashSetTreeSet
অর্ডারিংকোন নির্দিষ্ট অর্ডার নেইপ্রাক-নির্ধারিত ক্রম (Ascending Order)
ডুপ্লিকেট এলিমেন্টডুপ্লিকেট এলিমেন্ট রাখা হয় নাডুপ্লিকেট এলিমেন্ট রাখা হয় না
পারফরম্যান্সতীব্র পারফরম্যান্স (অর্ডার করার জন্য সময় লাগে না)একটু ধীর, কারণ এটি সজ্জিত থাকতে হয়
ইনটারফেসSet ইনটারফেসের বাস্তবায়নNavigableSet ইনটারফেসের বাস্তবায়ন

4. TreeSet এবং HashSet এর সুবিধা এবং ব্যবহার:

  • HashSet:
    • ফাস্ট অপারেশন: যদি আপনাকে শুধু ইউনিক এলিমেন্ট রাখতে হয় এবং অর্ডার খুব গুরুত্বপূর্ণ না হয়, তবে HashSet বেশ কার্যকর।
    • ডুপ্লিকেট হ্যান্ডলিং: এটি ডুপ্লিকেট এলিমেন্টগুলিকে সরিয়ে ফেলতে সহায়তা করে।
  • TreeSet:
    • Sorted Collection: যদি আপনার এলিমেন্টগুলিকে সাজানো অবস্থায় প্রয়োজন হয় (যেমন, সর্বনিম্ন থেকে সর্বোচ্চ), তবে TreeSet ব্যবহার করুন।
    • NavigableSet: এটি lower(), higher(), pollFirst(), pollLast() ইত্যাদি সুবিধা প্রদান করে, যা নির্দিষ্ট এলিমেন্টের আগে বা পরে থাকা এলিমেন্ট পাওয়ার জন্য উপযোগী।
  • HashSet হল একটি দ্রুত এবং অর্ডারহীন সংগ্রহ যা ডুপ্লিকেট এলিমেন্টকে প্রতিরোধ করে।
  • TreeSet হল একটি সজ্জিত সংগ্রহ যা ইনপুট এলিমেন্টগুলিকে সন্নিবেশকালে সাজিয়ে রাখে, এবং এটি অ্যাসেন্ডিং অর্ডারে এলিমেন্ট প্রদান করে।

এই দুইটি Set-এর মধ্যে আপনি আপনার প্রয়োজনে নির্বাচন করতে পারেন: যদি অর্ডার গুরুত্বপূর্ণ না হয় তবে HashSet, আর যদি অর্ডার গুরুত্বপূর্ণ হয় তবে TreeSet ব্যবহার করা যেতে পারে।

Content added By

Queue এবং PriorityQueue Example: Queue ব্যবহার করে Data Structure পরিচালনা

118
118

Queue এবং PriorityQueue Java Collections Framework এর অংশ, যা FIFO (First-In-First-Out) আর্কিটেকচার অনুসরণ করে এবং বিভিন্ন ধরনের ডেটা স্ট্রাকচার পরিচালনা করতে সাহায্য করে। Queue সাধারণত কোনো ডেটা প্রবাহের পরিচালনা করতে ব্যবহৃত হয়, যেখানে প্রথমে ঢোকানো এলিমেন্ট প্রথমে বের হয়।

PriorityQueue একটি বিশেষ ধরনের Queue যেখানে এলিমেন্টগুলিকে তাদের প্রাধান্য (priority) অনুযায়ী সাজানো হয়, অর্থাৎ সবচেয়ে গুরুত্বপূর্ণ (এবং নির্ধারিত priority) এলিমেন্টটি প্রথমে বের হবে।

নিচে Queue এবং PriorityQueue ব্যবহারের উদাহরণ দেওয়া হলো।

1. Queue Example: Queue ব্যবহার করে Data Structure পরিচালনা

Queue সাধারণভাবে FIFO (First-In-First-Out) ভিত্তিক ডেটা স্ট্রাকচার। এর মধ্যে প্রথমে ঢোকানো উপাদানটি প্রথমে বের হবে। Java তে Queue interface এর মাধ্যমে এই ডেটা স্ট্রাকচার পরিচালনা করা হয়।

Queue Example:

import java.util.LinkedList;
import java.util.Queue;

public class QueueExample {
    public static void main(String[] args) {
        // Queue অবজেক্ট তৈরি করা (LinkedList ক্লাস ব্যবহার করা হয়েছে Queue ইন্টারফেসের জন্য)
        Queue<String> queue = new LinkedList<>();

        // Queue তে উপাদান যোগ করা
        queue.add("Apple");
        queue.add("Banana");
        queue.add("Cherry");
        queue.add("Date");

        // Queue তে থাকা উপাদানগুলি প্রিন্ট করা
        System.out.println("Queue: " + queue);

        // প্রথম উপাদান বের করা (FIFO)
        System.out.println("Removed: " + queue.poll()); // Apple - First element (FIFO)

        // পরবর্তীতে অবশিষ্ট উপাদান প্রিন্ট করা
        System.out.println("Queue after removal: " + queue);

        // Peek: পরবর্তী এলিমেন্ট দেখতে হবে (প্রথম ইন)
        System.out.println("Next element to be removed: " + queue.peek()); // Banana
    }
}

আউটপুট:

Queue: [Apple, Banana, Cherry, Date]
Removed: Apple
Queue after removal: [Banana, Cherry, Date]
Next element to be removed: Banana

ব্যাখ্যা:

  • Queue interface ব্যবহার করে একটি LinkedList ডেটা স্ট্রাকচার তৈরি করা হয়েছে।
  • add() মেথড দিয়ে Queue তে এলিমেন্ট যোগ করা হয়েছে।
  • poll() মেথড দিয়ে Queue থেকে প্রথম এলিমেন্ট বের করা হয়েছে (FIFO প্রক্রিয়া অনুযায়ী)।
  • peek() মেথড ব্যবহার করে পরবর্তী এলিমেন্ট দেখা গেছে যা FIFO অনুযায়ী বের হবে।

2. PriorityQueue Example:

PriorityQueue একটি বিশেষ Queue যেখানে প্রতিটি এলিমেন্টের priority অনুযায়ী সাজানো হয়। PriorityQueue এর মাধ্যমে আপনি একটি এলিমেন্টের priority নির্ধারণ করে ডেটা স্ট্রাকচার পরিচালনা করতে পারেন। সবচেয়ে কম priority বা সবচেয়ে বেশি priority সহ এলিমেন্টটি প্রথমে বের হয় (ডিফল্টভাবে এটি natural ordering অনুসরণ করে, তবে Comparator ব্যবহার করে কাস্টম অর্ডারিং করা যেতে পারে)।

PriorityQueue Example:

import java.util.PriorityQueue;

public class PriorityQueueExample {
    public static void main(String[] args) {
        // PriorityQueue অবজেক্ট তৈরি করা
        PriorityQueue<String> priorityQueue = new PriorityQueue<>();

        // Queue তে উপাদান যোগ করা
        priorityQueue.add("Apple");
        priorityQueue.add("Banana");
        priorityQueue.add("Cherry");
        priorityQueue.add("Date");

        // PriorityQueue তে থাকা উপাদানগুলি প্রিন্ট করা (Natural order: Alphabetically)
        System.out.println("PriorityQueue (Natural order): " + priorityQueue);

        // প্রথম উপাদান বের করা (priority অনুযায়ী)
        System.out.println("Removed: " + priorityQueue.poll()); // Apple - smallest according to alphabetic order

        // পরবর্তীতে অবশিষ্ট উপাদান প্রিন্ট করা
        System.out.println("PriorityQueue after removal: " + priorityQueue);

        // Peek: পরবর্তী এলিমেন্ট দেখতে হবে
        System.out.println("Next element to be removed: " + priorityQueue.peek()); // Banana
    }
}

আউটপুট:

PriorityQueue (Natural order): [Apple, Banana, Cherry, Date]
Removed: Apple
PriorityQueue after removal: [Banana, Date, Cherry]
Next element to be removed: Banana

ব্যাখ্যা:

  • PriorityQueue দ্বারা ডেটা সাজানো হচ্ছে alphabetically, কারণ PriorityQueue ডিফল্টভাবে natural ordering অনুসরণ করে।
  • poll() মেথড দ্বারা সবচেয়ে ছোট এলিমেন্ট (এখানে Apple) বের করা হয়েছে।
  • peek() মেথড ব্যবহার করে পরবর্তী এলিমেন্টটি দেখা গেছে যা priority অনুযায়ী বের হবে (এখানে Banana).

কাস্টম PriorityQueue (Custom Ordering) Example:

আপনি যদি কাস্টম ordering চান, তবে Comparator ব্যবহার করে PriorityQueue তে কাস্টম সাজানো ব্যবস্থা করতে পারেন। নিচে একটি উদাহরণ দেওয়া হলো যেখানে priority queue সংখ্যা অনুযায়ী সাজানো হবে।

Custom PriorityQueue Example (Integer Based Priority):

import java.util.PriorityQueue;
import java.util.Comparator;

public class CustomPriorityQueueExample {
    public static void main(String[] args) {
        // Custom Comparator দিয়ে PriorityQueue তৈরি করা যাতে বড় সংখ্যাগুলি আগে আসে
        PriorityQueue<Integer> customQueue = new PriorityQueue<>(Comparator.reverseOrder());

        // Queue তে উপাদান যোগ করা
        customQueue.add(10);
        customQueue.add(20);
        customQueue.add(5);
        customQueue.add(15);

        // PriorityQueue তে থাকা উপাদানগুলি প্রিন্ট করা (Descending order)
        System.out.println("Custom PriorityQueue (Descending order): " + customQueue);

        // প্রথম উপাদান বের করা (Priority অনুযায়ী, বড় থেকে ছোট)
        System.out.println("Removed: " + customQueue.poll()); // 20

        // পরবর্তীতে অবশিষ্ট উপাদান প্রিন্ট করা
        System.out.println("Custom PriorityQueue after removal: " + customQueue);

        // Peek: পরবর্তী এলিমেন্ট দেখতে হবে
        System.out.println("Next element to be removed: " + customQueue.peek()); // 15
    }
}

আউটপুট:

Custom PriorityQueue (Descending order): [20, 15, 10, 5]
Removed: 20
Custom PriorityQueue after removal: [15, 5, 10]
Next element to be removed: 15

ব্যাখ্যা:

  • PriorityQueueComparator.reverseOrder() ব্যবহার করে কাস্টম সাজানো হয়েছে যাতে সবচেয়ে বড় এলিমেন্ট প্রথমে আসে।
  • poll() মেথড ব্যবহার করে সবচেয়ে বড় এলিমেন্ট (20) প্রথমে বের করা হয়েছে।
  • Queue: FIFO (First-In-First-Out) ভিত্তিক ডেটা স্ট্রাকচার যা LinkedList বা PriorityQueue দিয়ে কার্যকরীভাবে পরিচালনা করা যায়।
  • PriorityQueue: এটি একটি কাস্টম সাজানো Queue যেখানে ডেটা এলিমেন্টগুলো তাদের priority অনুযায়ী সাজানো হয়। এটি Comparator ব্যবহার করে কাস্টম অর্ডারিং করতে পারে এবং প্রাধান্য অনুসারে ডেটা প্রক্রিয়া করতে সাহায্য করে।

Java তে Queue এবং PriorityQueue দুটি শক্তিশালী ডেটা স্ট্রাকচার যা বিভিন্ন ধরণের ডেটা পরিচালনা এবং প্রক্রিয়া করতে ব্যবহার করা হয়।

Content added By

LinkedList Example: LinkedList এর মাধ্যমে Data Manipulation

94
94

Java তে LinkedList একটি ডাটা স্ট্রাকচার যা Collection Framework এর অংশ। এটি একটি ডাবল লিংকড লিস্ট (doubly linked list) যা উপাদানগুলোকে লিংকেড নোড হিসেবে সংরক্ষণ করে। LinkedList ইটেমগুলোকে দ্রুত ইনসার্ট বা রিমুভ করতে সহায়তা করে, বিশেষত যখন আইটেমগুলো তালিকার শুরু বা শেষে যুক্ত বা অপসারণ করা হয়।

LinkedList এর প্রধান সুবিধা:

  1. Dynamic Size: LinkedList এর আকার পরিবর্তনশীল, তাই এটি ফিক্সড আকারের অ্যারে থেকে বেশি সুবিধাজনক।
  2. Efficient Insertions/Deletions: যদি ডেটা তালিকার শুরু বা শেষে থাকতে থাকে, তবে ইনসার্ট বা ডিলিশন কার্যক্রম দ্রুত হয়।

LinkedList ক্লাসের কিছু প্রধান মেথড:

  • add(E e): একটি উপাদান তালিকায় যুক্ত করে।
  • remove(Object o): তালিকা থেকে একটি উপাদান সরিয়ে দেয়।
  • get(int index): নির্দিষ্ট ইনডেক্সের উপাদান রিটার্ন করে।
  • size(): তালিকায় মোট উপাদান সংখ্যা রিটার্ন করে।
  • isEmpty(): তালিকা খালি কিনা তা চেক করে।

উদাহরণ: LinkedList ব্যবহার করে Data Manipulation

import java.util.LinkedList;

public class LinkedListExample {
    public static void main(String[] args) {
        // LinkedList তৈরি
        LinkedList<String> fruits = new LinkedList<>();

        // List এ উপাদান যোগ করা
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Orange");
        fruits.add("Mango");

        // List এর আউটপুট
        System.out.println("Initial List: " + fruits);

        // List এ উপাদান নির্দিষ্ট স্থানে যোগ করা (প্রথম স্থানে)
        fruits.addFirst("Pineapple");
        System.out.println("After adding to the first: " + fruits);

        // List এর শেষের দিকে একটি উপাদান যোগ করা
        fruits.addLast("Grapes");
        System.out.println("After adding to the last: " + fruits);

        // List থেকে একটি উপাদান সরানো
        fruits.remove("Banana");
        System.out.println("After removing Banana: " + fruits);

        // List থেকে প্রথম উপাদান সরানো
        fruits.removeFirst();
        System.out.println("After removing first element: " + fruits);

        // List থেকে শেষ উপাদান সরানো
        fruits.removeLast();
        System.out.println("After removing last element: " + fruits);

        // নির্দিষ্ট ইনডেক্সের উপাদান নেওয়া
        String fruitAtIndex2 = fruits.get(2);  // Index 2 তে যে উপাদান রয়েছে
        System.out.println("Element at index 2: " + fruitAtIndex2);

        // List এর আকার
        int size = fruits.size();
        System.out.println("Size of the List: " + size);

        // List খালি কিনা তা চেক করা
        boolean isEmpty = fruits.isEmpty();
        System.out.println("Is the List empty? " + isEmpty);
    }
}

কোডের ব্যাখ্যা:

  1. LinkedList fruits = new LinkedList<>();:
    • এখানে একটি LinkedList তৈরি করা হয়েছে যেটি String ডেটা ধারণ করবে।
  2. add():
    • fruits.add("Apple"); মেথডটি তালিকার শেষে "Apple" উপাদান যোগ করে।
  3. addFirst() এবং addLast():
    • addFirst("Pineapple"); প্রথম স্থানে "Pineapple" যোগ করে।
    • addLast("Grapes"); তালিকার শেষে "Grapes" যোগ করে।
  4. remove():
    • fruits.remove("Banana"); "Banana" উপাদানটি তালিকা থেকে সরিয়ে দেয়।
    • fruits.removeFirst(); তালিকার প্রথম উপাদান সরিয়ে দেয়।
    • fruits.removeLast(); তালিকার শেষ উপাদান সরিয়ে দেয়।
  5. get():
    • fruits.get(2); তালিকার 2 নম্বর ইনডেক্সে থাকা উপাদানটি রিটার্ন করে। এখানে ইনডেক্সিং 0 থেকে শুরু হয়।
  6. size():
    • fruits.size(); তালিকায় মোট উপাদান সংখ্যা রিটার্ন করে।
  7. isEmpty():
    • fruits.isEmpty(); চেক করে তালিকা খালি কিনা।

আউটপুট:

Initial List: [Apple, Banana, Orange, Mango]
After adding to the first: [Pineapple, Apple, Banana, Orange, Mango]
After adding to the last: [Pineapple, Apple, Banana, Orange, Mango, Grapes]
After removing Banana: [Pineapple, Apple, Orange, Mango, Grapes]
After removing first element: [Apple, Orange, Mango, Grapes]
After removing last element: [Apple, Orange, Mango]
Element at index 2: Mango
Size of the List: 3
Is the List empty? false

ব্যাখ্যা:

  1. প্রথমে add() ব্যবহার করে কিছু ফ্রুট তালিকায় যোগ করা হয়েছে।
  2. তারপর addFirst() এবং addLast() দিয়ে তালিকার প্রথম ও শেষের স্থানে উপাদান যোগ করা হয়েছে।
  3. remove() দিয়ে কিছু উপাদান সরানো হয়েছে এবং get() দিয়ে নির্দিষ্ট ইনডেক্সের উপাদান নেওয়া হয়েছে।
  4. শেষে size() এবং isEmpty() মেথড দিয়ে তালিকার আকার এবং খালি কিনা তা চেক করা হয়েছে।
  5. Dynamic Size: একটি LinkedList স্বয়ংক্রিয়ভাবে সাইজ পরিবর্তন করতে পারে।
  6. Efficient Insertions/Deletions: যেকোনো স্থানে উপাদান ইনসার্ট বা ডিলিট করা খুব দ্রুত হয়।
  7. Accessing Elements: যদিও লিঙ্কড লিস্টের উপাদানগুলোকে অ্যাক্সেস করা ধীরে ঘটে, তবে ইনসার্ট এবং ডিলিশন দ্রুত হয়।

এই উদাহরণটি LinkedList ব্যবহার করে ডেটার ম্যানিপুলেশন (যেমন ইনসার্ট, রিমুভ, আ্যাক্সেস) দেখাচ্ছে।

Content added By
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion