Java Technologies Java Collections Framework এবং Generics এর সম্পর্ক গাইড ও নোট

298

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


Java Collections Framework এবং Generics এর ভূমিকা

  1. Generics এর আগে Collection Framework
    Generics ব্যবহার করার আগে, Collections Framework-এ ডেটা ইনসার্ট এবং রিট্রাইভ করার সময় টাইপ কাস্টিং করতে হতো। এটি runtime errors-এর ঝুঁকি বাড়াতো।
// Without Generics
import java.util.*;

public class Main {
    public static void main(String[] args) {
        List list = new ArrayList(); // Non-generic List
        list.add("Hello");
        list.add(10); // Allowed, no compile-time error

        for (Object obj : list) {
            String str = (String) obj; // Runtime error for non-String objects
            System.out.println(str);
        }
    }
}

সমস্যা:

  • Compile-time টাইপ চেকিং অনুপস্থিত।
  • Runtime টাইপ কাস্টিং ব্যর্থ হতে পারে এবং ClassCastException ঘটতে পারে।

  1. Generics এর সাথে Collection Framework
    Generics ব্যবহার করে, Collection Framework টাইপ সেফটি নিশ্চিত করে এবং টাইপ কাস্টিংয়ের প্রয়োজনীয়তা দূর করে।
// With Generics
import java.util.*;

public class Main {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>(); // Generic List
        list.add("Hello");
        // list.add(10); // Compile-time error

        for (String str : list) {
            System.out.println(str); // No type casting needed
        }
    }
}

সুবিধা:

  • Compile-time টাইপ চেকিং নিশ্চিত হয়।
  • কোড নিরাপদ ও রিডেবল হয়।

Generics এবং Collections Framework-এর সম্পর্কিত উদাহরণ

1. Generics ব্যবহার করে List

import java.util.*;

public class Main {
    public static void main(String[] args) {
        List<Integer> numbers = new ArrayList<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);

        for (Integer num : numbers) {
            System.out.println(num);
        }
    }
}

2. Generics ব্যবহার করে Map

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("One", 1);
        map.put("Two", 2);

        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            System.out.println(entry.getKey() + " = " + entry.getValue());
        }
    }
}

Common Collection Interfaces এবং Generics

  1. List
    • ArrayList<E>, LinkedList<E> ইত্যাদি।
    • উদাহরণ: List<String> list = new ArrayList<>();
  2. Set
    • HashSet<E>, TreeSet<E> ইত্যাদি।
    • উদাহরণ: Set<Integer> set = new HashSet<>();
  3. Map<K, V>
    • HashMap<K, V>, TreeMap<K, V> ইত্যাদি।
    • উদাহরণ: Map<String, Integer> map = new HashMap<>();
  4. Queue
    • PriorityQueue<E>, LinkedList<E> ইত্যাদি।
    • উদাহরণ: Queue<String> queue = new LinkedList<>();
  5. Deque
    • ArrayDeque<E>, LinkedList<E> ইত্যাদি।
    • উদাহরণ: Deque<Double> deque = new ArrayDeque<>();

Generics Collections-এর সুবিধা

  1. Type Safety নিশ্চিত করে
    Collection Framework-এ যে টাইপ ডেটা যোগ করা হবে, Generics সেটি compile-time এ চেক করে। ভুল টাইপ অ্যাড করলে compile-time error দেখায়।
  2. Runtime Errors প্রতিরোধ করে
    Generics টাইপ সংক্রান্ত runtime errors (যেমন ClassCastException) প্রতিরোধ করে।
  3. কোড রিডেবল এবং ম্যানেজযোগ্য করে
    Generics-এর কারণে টাইপ কাস্টিংয়ের প্রয়োজন হয় না, যা কোডকে আরও পরিষ্কার ও সহজ করে তোলে।

Wildcard Generics এবং Collections

Generics-এর সাথে wildcard (?) ব্যবহার করে বিভিন্ন টাইপ হ্যান্ডেল করা যায়।

উদাহরণ:

import java.util.*;

public class Main {
    public static void printList(List<?> list) {
        for (Object obj : list) {
            System.out.println(obj);
        }
    }

    public static void main(String[] args) {
        List<Integer> intList = List.of(1, 2, 3);
        List<String> strList = List.of("A", "B", "C");

        printList(intList); // Works with any type
        printList(strList);
    }
}

Bounded Wildcards

  1. Upper Bound (<? extends T>)
    এটি নির্ধারণ করে যে Generics টাইপ হবে T বা তার সাবটাইপ।

    public static void printNumbers(List<? extends Number> list) {
        for (Number num : list) {
            System.out.println(num);
        }
    }
    
  2. Lower Bound (<? super T>)
    এটি নির্ধারণ করে যে Generics টাইপ হবে T বা তার সুপারটাইপ।

    public static void addNumbers(List<? super Integer> list) {
        list.add(10); // Allowed
    }
    

  • Java Collections Framework এবং Generics একসাথে টাইপ সেফটি এবং কোড রিডেবিলিটি নিশ্চিত করে।
  • Generics ব্যবহার করলে compile-time টাইপ চেকিং সম্ভব হয়, যা runtime errors কমায়।
  • Collection Framework-এর সাথে Generics ব্যবহারের মাধ্যমে ডেটা ম্যানিপুলেশন সহজ, কার্যকর, এবং নিরাপদ হয়।
Content added By
Promotion

Are you sure to start over?

Loading...