পরিচিতি

Java Technologies - অ্যাপাচি কমন্স কালেকশনস (Apache Common Collection)
127
127

অ্যাপাচি কমন্স কালেকশনস (Apache Commons Collections) হল একটি ওপেন সোর্স লাইব্রেরি যা Java প্রোগ্রামিং ভাষায় বিভিন্ন ধরনের উন্নত ডেটা স্ট্রাকচার এবং কনভেনিয়েন্ট ইউটিলিটি ক্লাস প্রদান করে। এটি অ্যাপাচি কমন্স লাইব্রেরির একটি অংশ এবং মূলত Java Collections Framework এর বাইরের কিছু অতিরিক্ত ডেটা স্ট্রাকচার এবং ইউটিলিটি ফাংশন সরবরাহ করে। এই লাইব্রেরিটি Java Collections API এর স্ট্যান্ডার্ড কার্যকলাপের পরিপূরক হিসেবে কাজ করে এবং বিভিন্ন ধরনের এডভান্সড ডেটা স্ট্রাকচার, যেমন Bag, BidiMap, MultiMap, Deque, এবং আরও অনেক কিছু সরবরাহ করে।

অ্যাপাচি কমন্স কালেকশনস লাইব্রেরি বিশেষভাবে উপকারী যখন আপনি কাস্টম কালেকশন, ডেটা ফিল্টারিং, ট্রান্সফরমেশন এবং অন্যান্য স্ট্রিং এবং কালেকশন ম্যানিপুলেশন সম্পর্কিত কার্যকলাপ করতে চান। এটি কোডিংয়ের জটিলতা কমায় এবং কাজের গতি বাড়ায়।


১. অ্যাপাচি কমন্স কালেকশনস এর উদ্দেশ্য

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

এটি ডেভেলপারদের জন্য সরবরাহ করে:

  • উন্নত ডেটা স্ট্রাকচার যেমন Bag, BidiMap, MultiMap, Deque ইত্যাদি।
  • কালেকশন ফিল্টারিং, ট্রান্সফরমেশন এবং অন্যান্য কার্যকরী ইউটিলিটি।
  • কার্যকরী এবং দ্রুত ডেটা ম্যানিপুলেশন।

২. অ্যাপাচি কমন্স কালেকশনস এর বৈশিষ্ট্য

অ্যাপাচি কমন্স কালেকশনস লাইব্রেরি Java প্রোগ্রামে কালেকশন ম্যানিপুলেশনকে আরও শক্তিশালী এবং সহজ করে তোলে। এর কিছু বৈশিষ্ট্য এবং কার্যক্ষমতা হল:

  • Extended Data Structures: এটি Java স্ট্যান্ডার্ড কালেকশন API এর বাইরের কিছু অতিরিক্ত ডেটা স্ট্রাকচার সরবরাহ করে, যেমন:
    • Bag: যেখানে একটি নির্দিষ্ট আইটেমের উপস্থিতি (frequency) ট্র্যাক করা হয়।
    • BidiMap: একটি দ্বিমুখী ম্যাপ, যেখানে আপনি কী এবং মান উভয় দিক থেকে অ্যাক্সেস করতে পারেন।
    • MultiMap: যেখানে একটি কী এর সাথে একাধিক মান যোগ করা যায়।
    • Deque: ডাবল-এন্ডেড কিউ যা উভয় প্রান্ত থেকে আইটেম ইনসার্ট বা রিমুভ করতে পারে।
  • Predicates and Filters: কালেকশন ফিল্টারিং এবং শর্ত সাপেক্ষ নির্বাচন করার জন্য বিভিন্ন predicate এবং filter ফাংশন সরবরাহ করে।
  • Transformers: কালেকশনের আইটেমগুলির ওপর ট্রান্সফরমেশন (যেমন মাপিং) করার জন্য সহজ ইউটিলিটি।
  • Immutable Collections: পরিবর্তনশীল (mutable) এবং অপরিবর্তনীয় (immutable) কালেকশন তৈরির জন্য ক্লাস এবং ফাংশন সরবরাহ করে।
  • Iterator Utilities: বিভিন্ন Iterator সংক্রান্ত কার্যকলাপ যেমন forEach এবং filter ফাংশন সরবরাহ করে।

৩. কমন্স কালেকশনস লাইব্রেরি ব্যবহারের উপকারিতা

  • সহজ ব্যবহারের জন্য উন্নত ডেটা স্ট্রাকচার: Java এর স্ট্যান্ডার্ড API তে অনেক ক্ষেত্রে আপনি যা খুঁজে পান, কমন্স কালেকশনসে সেই একই কার্যকারিতা অতিরিক্ত ডেটা স্ট্রাকচার এবং ফাংশনের মাধ্যমে আরো সাশ্রয়ী এবং সহজে পাওয়া যায়।
  • কাস্টম কালেকশন এবং কার্যকরী ম্যানিপুলেশন: আপনি যদি কাস্টম কালেকশন বা আইটেমের উপর কোনো ট্রান্সফরমেশন বা ফিল্টারিং করতে চান, তাহলে অ্যাপাচি কমন্স কালেকশনস লাইব্রেরি সেই কাজকে আরো সহজ এবং কার্যকরী করে তোলে।
  • নির্ভরযোগ্য এবং অ্যাপাচি ফাউন্ডেশন দ্বারা সমর্থিত: এটি অ্যাপাচি ফাউন্ডেশন দ্বারা সমর্থিত এবং নিয়মিত আপডেট ও উন্নয়ন হয়।
  • ভাল পারফরম্যান্স: বিশেষ ধরনের ডেটা স্ট্রাকচারগুলো ব্যবহারে কার্যকারিতা বৃদ্ধি পায় এবং সময় বাঁচানো যায়।

৪. অ্যাপাচি কমন্স কালেকশনস এর কিছু জনপ্রিয় ক্লাস

৪.১. Bag

Bag একটি ডেটা স্ট্রাকচার যা একটি নির্দিষ্ট আইটেমের উপস্থিতি গণনা করে। এটি মূলত Map এর মতো কাজ করে, তবে এখানে আপনি আইটেমের সংখ্যা (frequency) ট্র্যাক করতে পারেন।

import org.apache.commons.collections4.Bag;
import org.apache.commons.collections4.bag.HashBag;

Bag<String> bag = new HashBag<>();
bag.add("apple");
bag.add("banana");
bag.add("apple");

System.out.println("Count of apple: " + bag.getCount("apple"));  // Output: 2

৪.২. BidiMap

BidiMap হল একটি দ্বিমুখী ম্যাপ, যা মান এবং কী উভয় দিকে অ্যাক্সেস করার সুবিধা প্রদান করে।

import org.apache.commons.collections4.BidiMap;
import org.apache.commons.collections4.map.HashBidiMap;

BidiMap<String, String> bidiMap = new HashBidiMap<>();
bidiMap.put("one", "1");
bidiMap.put("two", "2");

System.out.println(bidiMap.get("one"));  // Output: 1
System.out.println(bidiMap.getKey("2"));  // Output: two

৪.৩. MultiMap

MultiMap হল একটি বিশেষ ধরনের ম্যাপ যা একাধিক মানকে একটি কী এর সাথে অ্যাসোসিয়েট করতে সক্ষম।

import org.apache.commons.collections4.MultiMap;
import org.apache.commons.collections4.map.MultiValueMap;
import org.apache.commons.collections4.map.HashedMap;

MultiMap<String, String> multiMap = new MultiValueMap<>();
multiMap.put("fruit", "apple");
multiMap.put("fruit", "banana");
multiMap.put("vegetable", "carrot");

System.out.println(multiMap.get("fruit"));  // Output: [apple, banana]

৪.৪. Deque (Double Ended Queue)

Deque হল একটি ডাবল-এন্ডেড কিউ, যা একে অপরের বিপরীতে আইটেম ইনসার্ট এবং রিমুভ করার সুবিধা প্রদান করে।

import org.apache.commons.collections4.Queue;
import org.apache.commons.collections4.queue.CircularFifoQueue;

Deque<String> deque = new CircularFifoQueue<>(5);
deque.add("apple");
deque.add("banana");
deque.add("cherry");

System.out.println(deque);  // Output: [apple, banana, cherry]

৫. সারাংশ

অ্যাপাচি কমন্স কালেকশনস (Apache Commons Collections) লাইব্রেরি Java ডেভেলপারদের জন্য একটি অত্যন্ত কার্যকরী টুল, যা উন্নত ডেটা স্ট্রাকচার এবং ইউটিলিটি ক্লাস সরবরাহ করে। এটি Bag, BidiMap, MultiMap, Deque সহ আরও অনেক বিশেষ ধরনের ডেটা স্ট্রাকচার সরবরাহ করে যা স্ট্যান্ডার্ড Java Collections API এর বাইরের কাজগুলো সহজ করে তোলে। এটি ডেটা ম্যানিপুলেশন, ট্রান্সফরমেশন, ফিল্টারিং এবং অন্যান্য কার্যক্রম দ্রুত এবং কার্যকরীভাবে সম্পাদন করতে সহায়তা করে।

common.content_added_by

Apache Commons Collections কি?

125
125

Apache Commons Collections হল একটি ওপেন সোর্স লাইব্রেরি যা Java Collections Framework (JCF) এর উপর ভিত্তি করে অতিরিক্ত ডেটা স্ট্রাকচার এবং ইউটিলিটি ফাংশন সরবরাহ করে। এটি Java প্রোগ্রামিং ভাষায় ব্যবহৃত একটি খুবই জনপ্রিয় লাইব্রেরি যা ডেটা স্টোরেজ, ম্যানিপুলেশন এবং অ্যাক্সেস করার জন্য অতিরিক্ত কার্যকারিতা প্রদান করে।

১. Apache Commons Collections এর উদ্দেশ্য

Apache Commons Collections এর মূল উদ্দেশ্য হল Java Collections Framework এর সীমানা ছাড়িয়ে গিয়ে আরও কার্যকরী ডেটা স্ট্রাকচার এবং ইউটিলিটি ক্লাস প্রদান করা। Java Collections Framework মূলত List, Set, Map এবং Queue এ কাজ করে, তবে Apache Commons Collections Java-এর সাধারণ কালেকশনগুলোর মধ্যে অতিরিক্ত ক্ষমতা যোগ করে। এই লাইব্রেরিটি Bag, MultiMap, BidiMap, ListOrderedMap, LIFO/FIFO Queue ইত্যাদি নতুন ডেটা স্ট্রাকচার সরবরাহ করে যা Java Collections Framework-এ বিদ্যমান নেই।

২. Apache Commons Collections লাইব্রেরির সুবিধাসমূহ

  • নতুন এবং উন্নত ডেটা স্ট্রাকচার: Bag, MultiMap, BidiMap ইত্যাদি স্ট্রাকচারগুলি Java Collections Framework এ নেই। এই স্ট্রাকচারগুলি বেশিরভাগ ডেটা ম্যানিপুলেশন কাজকে সহজ করে।
  • সহজ ইউটিলিটি ক্লাস: লাইব্রেরিটি ডেটা স্ট্রাকচারগুলির উপর ইউটিলিটি ক্লাস সরবরাহ করে যেমন CollectionUtils, MapUtils, IteratorUtils, ইত্যাদি যা আপনাকে সাধারণ কালেকশন অপারেশনগুলি সহজে করতে সহায়তা করে।
  • অতিরিক্ত কার্যকারিতা: Java Collections Framework-এর বাইরে অতিরিক্ত কার্যকারিতা যেমন BidiMap এবং MultiMap সরবরাহ করে যা অনেক পরিস্থিতিতে ব্যবহার উপযোগী।
  • Java Collections Framework-এর সাথে সামঞ্জস্য: এটি Java Collections Framework (JCF) এর সাথে পূর্ণ সামঞ্জস্যপূর্ণ, অর্থাৎ আপনি এটি Java-এর স্ট্যান্ডার্ড কালেকশন টাইপের সাথে একত্রে ব্যবহার করতে পারবেন।

৩. Apache Commons Collections এর প্রধান বৈশিষ্ট্যসমূহ

Apache Commons Collections বিভিন্ন ধরনের কার্যকারিতা এবং ডেটা স্ট্রাকচার প্রদান করে, কিছু গুরুত্বপূর্ণ বৈশিষ্ট্য নিম্নরূপ:

৩.১ Bag

Bag একটি বিশেষ ধরনের কালেকশন যা উপাদানগুলির উপস্থিতি সংখ্যা সংরক্ষণ করে। এর মানে হল যে, একটি উপাদান একাধিকবার থাকতে পারে।

উদাহরণ: Bag ক্লাস

import org.apache.commons.collections4.Bag;
import org.apache.commons.collections4.bag.HashBag;

public class BagExample {
    public static void main(String[] args) {
        Bag<String> bag = new HashBag<>();
        bag.add("apple");
        bag.add("banana");
        bag.add("apple");

        System.out.println("Bag contents: " + bag);
        System.out.println("apple count: " + bag.getCount("apple"));
    }
}

এখানে:

  • HashBag হল Bag ইমপ্লিমেন্টেশন, যা উপাদানগুলির উপস্থিতি গণনা করে এবং getCount() ফাংশনটি নির্দিষ্ট উপাদানটির উপস্থিতির সংখ্যা প্রদর্শন করে।

৩.২ BidiMap

BidiMap একটি ম্যাপ যেখানে কী এবং ভ্যালু উভয়ই একে অপরের সাথে সম্পর্কযুক্ত। আপনি কী থেকে ভ্যালু এবং ভ্যালু থেকে কী দুটোই এক্সেস করতে পারেন।

উদাহরণ: BidiMap ক্লাস

import org.apache.commons.collections4.BidiMap;
import org.apache.commons.collections4.map.HashedMap;

public class BidiMapExample {
    public static void main(String[] args) {
        BidiMap<String, String> bidiMap = new HashedMap<>();
        bidiMap.put("apple", "fruit");
        bidiMap.put("carrot", "vegetable");

        System.out.println("apple is a " + bidiMap.get("apple"));
        System.out.println("fruit is a " + bidiMap.getKey("fruit"));
    }
}

এখানে:

  • HashedMap একটি BidiMap ইমপ্লিমেন্টেশন, যা কী এবং ভ্যালু উভয়ের জন্য মিউটেবল (bidirectional) এক্সেস সরবরাহ করে।
  • getKey() ফাংশনটি ভ্যালু থেকে কী বের করার সুযোগ দেয়।

৩.৩ MultiMap

MultiMap একটি ম্যাপ যেখানে প্রতিটি কী একাধিক ভ্যালুর সাথে সম্পর্কিত থাকে। এটি সাধারণত যখন আপনি একটি কী-এর জন্য একাধিক মানের প্রয়োজন হয়, তখন ব্যবহৃত হয়।

উদাহরণ: MultiMap ক্লাস

import org.apache.commons.collections4.MultiMap;
import org.apache.commons.collections4.map.MultiValueMap;

public class MultiMapExample {
    public static void main(String[] args) {
        MultiMap<String, String> multiMap = new MultiValueMap<>();
        multiMap.put("fruits", "apple");
        multiMap.put("fruits", "banana");
        multiMap.put("fruits", "orange");

        System.out.println("fruits: " + multiMap.get("fruits"));
    }
}

এখানে:

  • MultiValueMap একটি MultiMap ইমপ্লিমেন্টেশন, যা একই কী-এর জন্য একাধিক মান সংরক্ষণ করতে সক্ষম।
  • put() ফাংশনটি কী-এর সাথে একাধিক মান সংযুক্ত করে।

৩.৪ ListOrderedMap

ListOrderedMap একটি ম্যাপ যা তালিকার মতো আচরণ করে এবং উপাদানগুলি ইনসার্ট করা অর্ডারে সংরক্ষণ করে। এটি সাধারণভাবে অর্ডারযুক্ত ম্যাপের মতো কাজ করে।


৪. Apache Commons Collections ব্যবহারের সুবিধা

  • Java Collections Framework-এর বাইরে অতিরিক্ত ডেটা স্ট্রাকচার: Apache Commons Collections আপনাকে এমন ডেটা স্ট্রাকচার সরবরাহ করে যা Java Collections Framework-এ নেই।
  • সমৃদ্ধ ফিচার: এটি স্ট্যান্ডার্ড Java কালেকশন ফ্রেমওয়ার্কের সঙ্গে একত্রে ব্যবহার করা যেতে পারে এবং অতিরিক্ত কার্যকারিতা প্রদান করে।
  • নমনীয়তা: Apache Commons Collections-এ প্রচুর পরিমাণে ইউটিলিটি ক্লাস রয়েছে যা ডেটা ম্যানিপুলেশনকে আরও সহজ করে তোলে।
  • সহজে এক্সটেন্ডযোগ্য: আপনি Apache Commons Collections এর বিভিন্ন ক্লাস এবং ইন্টারফেসকে আপনার প্রয়োজনে কাস্টমাইজ এবং এক্সটেন্ড করতে পারেন।

৫. Apache Commons Collections ইনস্টলেশন

আপনি যদি Apache Commons Collections ব্যবহার করতে চান, তবে আপনাকে এটি আপনার প্রোজেক্টে যুক্ত করতে হবে। যদি আপনি Maven ব্যবহার করেন, তবে আপনার pom.xml ফাইলে নিম্নলিখিত ডিপেনডেন্সি যোগ করতে হবে:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-collections4</artifactId>
    <version>4.4</version>
</dependency>

এটি আপনার প্রোজেক্টে Apache Commons Collections লাইব্রেরি যুক্ত করবে।


সারাংশ

Apache Commons Collections একটি শক্তিশালী Java লাইব্রেরি যা Java Collections Framework-এর বাইরে অতিরিক্ত ডেটা স্ট্রাকচার এবং ইউটিলিটি ক্লাস সরবরাহ করে। এতে Bag, BidiMap, MultiMap, ListOrderedMap, LIFO/FIFO Queue সহ উন্নত ডেটা স্ট্রাকচার রয়েছে, যা অনেক পরিস্থিতিতে কাজে আসে। এটি Java-এর স্ট্যান্ডার্ড কালেকশন ফ্রেমওয়ার্কের সাথে পুরোপুরি সামঞ্জস্যপূর্ণ এবং ডেটা স্টোরেজ, ম্যানিপুলেশন এবং অ্যাক্সেসের জন্য অতিরিক্ত কার্যকারিতা প্রদান করে।

common.content_added_by

Collection Framework এর ভূমিকা

149
149

Apache Commons Collections একটি Java লাইব্রেরি যা Java Collections Framework (JCF) এর উপর ভিত্তি করে তৈরি। এই লাইব্রেরি মূলত Java Collections Framework এর সক্ষমতাকে বৃদ্ধি করার জন্য ডিজাইন করা হয়েছে। এটি অতিরিক্ত collections এবং utility ক্লাস সরবরাহ করে যা JCF-এ অন্তর্ভুক্ত নয়।

Collection Framework (JCF) Java প্ল্যাটফর্মের একটি গুরুত্বপূর্ণ অংশ যা ডেটা সংগ্রহের জন্য বিভিন্ন ডেটা স্ট্রাকচার এবং ইন্টারফেস প্রদান করে। Apache Commons Collections এই ফ্রেমওয়ার্কের উপর ভিত্তি করে ডেটা ম্যানিপুলেশন এবং সংগ্রহের আরও উন্নত সুবিধা প্রদান করে।

১. Collection Framework এর ভূমিকা

Collection Framework মূলত Java Collections Framework (JCF) এর একটি কম্পোনেন্ট যা Java প্রোগ্রামিং ভাষায় বিভিন্ন ধরনের ডেটা সংগ্রহ ও ম্যানিপুলেশন করার জন্য ব্যবহৃত হয়। এটি ডেটা স্ট্রাকচার বা collections (যেমন, লিস্ট, সেট, ম্যাপ ইত্যাদি) প্রদান করে এবং তাদের উপর বিভিন্ন ধরনের অপারেশন (যেমন, ইনসার্ট, রিমুভ, সোর্ট ইত্যাদি) সম্পাদন করতে সাহায্য করে।

Collection Framework এর প্রধান লক্ষ্য:

  • ডেটা সংগঠনের স্ট্যান্ডার্ড পদ্ধতি প্রদান: JCF ডেটার মধ্যে সংগঠন এবং অ্যাক্সেস করার জন্য স্ট্যান্ডার্ড ইন্টারফেস এবং ক্লাস সরবরাহ করে।
  • ডেটার উপরে কার্যক্রম সম্পাদন সহজ করা: আপনি add(), remove(), contains(), size() ইত্যাদি সাধারণ কার্যাবলী জাভা কালেকশনের সাথে সরাসরি করতে পারেন।

Collection Framework এর প্রধান উপাদান:

  1. Collection Interface: এটি Set, List, এবং Queue এর মূল ইন্টারফেস।
  2. List Interface: এটি সিকোয়েন্সিয়াল ডেটা সংগ্রহের জন্য ব্যবহৃত হয়, যেমন অ্যারে লিস্ট এবং লিঙ্কড লিস্ট।
  3. Set Interface: এটি এমন একটি সংগ্রহ যেখানে কোন ডুপ্লিকেট উপাদান থাকতে পারে না।
  4. Map Interface: এটি কীগুলির মানের (key-value pairs) সংগ্রহ।
  5. Queue Interface: এটি একটি FIFO (First In First Out) সংগ্রহ, সাধারণত Queue এবং Deque

২. Apache Commons Collections এর ভূমিকা

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

Apache Commons Collections ফ্রেমওয়ার্কের সুবিধা:

  1. অতিরিক্ত ডেটা স্ট্রাকচার: Apache Commons Collections নতুন এবং শক্তিশালী ডেটা স্ট্রাকচার সরবরাহ করে যেমন BidiMap, MultiMap, Bag, Queue, এবং আরও অনেক কিছু।
  2. ডেকোরেটর প্যাটার্ন: Collections এর উপর অতিরিক্ত কার্যকারিতা (যেমন সিঙ্ক্রোনাইজেশন, ইমিউটেবিলিটি) যোগ করতে decorators প্রদান করে।
  3. ফিল্টারিং এবং ট্রান্সফরমিং: Transformer এবং Filter ক্লাস ব্যবহার করে ডেটা পরিবর্তন বা ফিল্টার করার সুবিধা দেয়।
  4. সহজ ইটারেশন এবং ফাংশনাল স্টাইল: Iterator এবং Iterable ইনটারফেসগুলোকে আরো কার্যকর এবং ফাংশনাল স্টাইল ব্যবহার করার জন্য সহায়ক ক্লাস প্রদান করে।

৩. Apache Commons Collections এর প্রধান উপাদান

  1. Bag:
    • Bag একটি বিশেষ ধরনের collection যা ডুপ্লিকেট আইটেম সমর্থন করে এবং কোন নির্দিষ্ট আইটেম কতবার উপস্থিত তা ট্র্যাক করে। এটি Set এর মতো, তবে ডুপ্লিকেট আইটেম থাকে।
    • উদাহরণ:

      import org.apache.commons.collections4.Bag;
      import org.apache.commons.collections4.bag.HashBag;
      
      Bag<String> bag = new HashBag<>();
      bag.add("apple");
      bag.add("apple");
      bag.add("banana");
      
      System.out.println(bag);  // Output: [apple x 2, banana x 1]
      
  2. BidiMap:
    • BidiMap হল একটি বিশেষ ধরনের Map যা উভয় দিক থেকে key এবং value অ্যাক্সেস করার সুবিধা দেয়। অর্থাৎ, আপনি শুধু key দিয়ে মান পেতে পারেন, বরং মান দিয়ে সেই key পেতেও পারেন।
    • উদাহরণ:

      import org.apache.commons.collections4.BidiMap;
      import org.apache.commons.collections4.map.HashBidiMap;
      
      BidiMap<String, String> bidiMap = new HashBidiMap<>();
      bidiMap.put("one", "1");
      bidiMap.put("two", "2");
      
      System.out.println(bidiMap.get("one"));  // Output: 1
      System.out.println(bidiMap.getKey("2")); // Output: two
      
  3. MultiMap:
    • MultiMap একটি বিশেষ ধরনের Map যেখানে একাধিক মান একই কী এর জন্য সংরক্ষিত হতে পারে।
    • উদাহরণ:

      import org.apache.commons.collections4.MultiMap;
      import org.apache.commons.collections4.map.MultiValueMap;
      
      MultiMap<String, String> multiMap = new MultiValueMap<>();
      multiMap.put("apple", "fruit");
      multiMap.put("apple", "red");
      multiMap.put("banana", "fruit");
      
      System.out.println(multiMap);  // Output: {apple=[fruit, red], banana=[fruit]}
      
  4. Queue:
    • Queue হল একটি FIFO (First In First Out) ডেটা স্ট্রাকচার যা Queue ইন্টারফেসে ডিফাইন করা থাকে। এটি ডেটার ব্যবস্থাপনা প্রক্রিয়াকে সহজ করে তোলে যেখানে আপনি ইনপুট এবং আউটপুট অর্ডার বজায় রাখতে চান।
    • উদাহরণ:

      import org.apache.commons.collections4.Queue;
      import org.apache.commons.collections4.queue.CircularFifoQueue;
      
      Queue<String> queue = new CircularFifoQueue<>(3);
      queue.add("apple");
      queue.add("banana");
      queue.add("cherry");
      
      System.out.println(queue);  // Output: [apple, banana, cherry]
      
      queue.add("date");
      System.out.println(queue);  // Output: [banana, cherry, date]
      
  5. IteratorUtils:
    • IteratorUtils হল Iterator এর বিভিন্ন অপারেশন যেমন filtering, transforming, এবং mapping ইত্যাদি সহায়তা করে। এটি ইনটারফেস এবং কোলেকশনের উপরে কাজ করার জন্য সহজ API প্রদান করে।
    • উদাহরণ:

      import org.apache.commons.collections4.IteratorUtils;
      import java.util.Arrays;
      import java.util.List;
      import java.util.Iterator;
      
      List<String> list = Arrays.asList("apple", "banana", "cherry");
      Iterator<String> iterator = list.iterator();
      
      // Filtering
      Iterator<String> filteredIterator = IteratorUtils.filteredIterator(iterator, item -> item.startsWith("b"));
      while(filteredIterator.hasNext()) {
          System.out.println(filteredIterator.next());  // Output: banana
      }
      

৪. Apache Commons Collections এবং Java Collections Framework এর মধ্যে সম্পর্ক

  • Java Collections Framework (JCF) একটি স্ট্যান্ডার্ড লাইব্রেরি যা শুধুমাত্র কিছু সাধারণ ডেটা স্ট্রাকচার (যেমন List, Set, Map) সরবরাহ করে।
  • Apache Commons Collections এই ফ্রেমওয়ার্কের উপর অতিরিক্ত ডেটা স্ট্রাকচার এবং ফিচার প্রদান করে, যেমন Bag, BidiMap, MultiMap, এবং Queue
  • Commons Collections Java Collections Framework এর উপর ভিত্তি করে তৈরি হলেও এটি আরও অনেক উন্নত এবং কাস্টমাইজড ডেটা স্ট্রাকচার সরবরাহ করে, যা JCF এর মধ্যে অন্তর্ভুক্ত নয়।

সারাংশ

Apache Commons Collections হল একটি শক্তিশালী লাইব্রেরি যা Java Collections Framework (JCF) এর উপর ভিত্তি করে অতিরিক্ত ডেটা স্ট্রাকচার এবং ইউটিলিটি ক্লাস প্রদান করে। এটি Java প্রোগ্রামিং ভাষায় ডেটা ম্যানিপুলেশন ও সংগঠনের কাজকে আরও সহজ, কার্যকরী এবং ফ্লেক্সিবল করে তোলে। Bag, BidiMap, MultiMap, এবং Queue এর মতো ক্লাসগুলো ডেটা সংগ্রহের জন্য নতুন ধারণা নিয়ে এসেছে, যা JCF এর সীমাবদ্ধতাকে ছাড়িয়ে যেতে সাহায্য করে।

common.content_added_by

Apache Commons Collections এবং Java Collections Framework এর পার্থক্য

121
121

Apache Commons Collections এবং Java Collections Framework (JCF) উভয়ই Java ডিপেনডেন্সি ম্যানেজমেন্ট এবং ডাটা স্ট্রাকচার ব্যবস্থাপনার জন্য ব্যবহৃত হয়, তবে এদের মধ্যে কিছু মৌলিক পার্থক্য রয়েছে। JCF Java-এর স্ট্যান্ডার্ড লাইব্রেরির অংশ, যেখানে সাধারণ ডাটা স্ট্রাকচার এবং তাদের জন্য বিভিন্ন ইন্টারফেস এবং ক্লাস রয়েছে। অপরদিকে, Apache Commons Collections হল একটি লাইব্রেরি যা Java Collections Framework এর উপর ভিত্তি করে উন্নত ফিচার এবং বিকল্প ডাটা স্ট্রাকচার সরবরাহ করে।

এই লেখায় আমরা আলোচনা করব Apache Commons Collections এবং Java Collections Framework এর মধ্যে প্রধান পার্থক্যগুলো।


1. ডাটা স্ট্রাকচার এবং ক্লাস

Java Collections Framework (JCF):

  • Java Collections Framework-এর মধ্যে কিছু সাধারণ ডাটা স্ট্রাকচার রয়েছে, যেমন:
    • List: যেমন ArrayList, LinkedList
    • Set: যেমন HashSet, TreeSet
    • Map: যেমন HashMap, TreeMap

Apache Commons Collections:

  • Apache Commons Collections বিভিন্ন বিশেষ ডাটা স্ট্রাকচার সরবরাহ করে যা Java Collections Framework এর মধ্যে অন্তর্ভুক্ত নয়। কিছু উদাহরণ:
    • Bag: এটি একটি কালেকশন যা আইটেমের সংখ্যা ট্র্যাক করে (যেমন একাধিক আইটেমের উপস্থিতি গুনে গুনে ট্র্যাক করা)।
    • MultiMap: এটি একটি ম্যাপ যেখানে একাধিক মান এক কীগুলির সাথে যুক্ত থাকতে পারে।
    • BidiMap: এটি একটি ম্যাপ যেখানে আপনি কী থেকে মান এবং মান থেকে কী উভয় দিকেই অনুসন্ধান করতে পারেন।
    • OrderedMap: এটি একটি ম্যাপ যা ইনপুট অর্ডারের ভিত্তিতে মান সংরক্ষণ করে।

উদাহরণ:

Bag<String> bag = new HashBag<>();
bag.add("apple");
bag.add("apple");
bag.add("banana");

এখানে Bag Java Collections Framework এর অংশ নয়, এটি Apache Commons Collections এর একটি বিশেষ ডাটা স্ট্রাকচার।


2. ডিপেনডেন্সি ম্যানেজমেন্ট

Java Collections Framework (JCF):

  • JCF একটি স্ট্যান্ডার্ড লাইব্রেরি যা Java এর JDK এর সাথে অন্তর্ভুক্ত থাকে। এটি Java প্রোগ্রামিং ভাষার অঙ্গ হিসাবে কাজ করে এবং ডিপেনডেন্সি ব্যবস্থাপনার জন্য অতিরিক্ত লাইব্রেরি ইনস্টল করার প্রয়োজন হয় না।

Apache Commons Collections:

  • Apache Commons Collections একটি তৃতীয় পক্ষের লাইব্রেরি। এটি Maven বা Gradle এর মাধ্যমে প্রোজেক্টে অন্তর্ভুক্ত করতে হয়। JCF-এর উপর ভিত্তি করে আরো উন্নত এবং কাস্টম ডাটা স্ট্রাকচার এবং ইউটিলিটি ফাংশন প্রদান করে।

Maven ডিপেনডেন্সি উদাহরণ:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-collections4</artifactId>
    <version>4.4</version>
</dependency>

এখানে আপনি Apache Commons Collections লাইব্রেরি Maven-এর মাধ্যমে আপনার প্রোজেক্টে অন্তর্ভুক্ত করছেন।


3. ফিচার এবং কাস্টমাইজেশন

Java Collections Framework (JCF):

  • JCF শুধুমাত্র মৌলিক ডাটা স্ট্রাকচার এবং অপারেশনগুলি সমর্থন করে। এটি List, Set, Map, Queue ইত্যাদি ডাটা স্ট্রাকচারগুলির জন্য মৌলিক ফাংশনালিটি দেয়। কিন্তু এতে বিশেষ ফিচার বা ডাটা স্ট্রাকচার খুব কম রয়েছে যা কাস্টমাইজেশন এবং উচ্চতর ডিপেনডেন্সি ব্যবস্থাপনা সমর্থন করে।

Apache Commons Collections:

  • Apache Commons Collections JCF-এর স্ট্যান্ডার্ড ফিচারগুলির উপর অতিরিক্ত কাস্টমাইজেশন এবং বিশেষ ডাটা স্ট্রাকচার সরবরাহ করে। যেমন:
    • MultiMap, Bag, BidiMap, OrderedMap ইত্যাদি ডাটা স্ট্রাকচারগুলি JCF-এ নেই।
    • এগুলির মাধ্যমে আপনি একাধিক মান বা অর্ডারযুক্ত ডাটা ম্যানেজ করতে পারেন, যা Java Collections Framework এর মাধ্যমে করা সম্ভব নয়।

4. প্রেডিকেট, ফিল্টার, এবং ট্রান্সফর্মেশন

Java Collections Framework (JCF):

  • JCF ডাটা স্ট্রাকচারের জন্য প্রেডিকেট বা ফিল্টারিং ফাংশনালিটি সরাসরি সমর্থন করে না। আপনি Java 8 থেকে Streams API ব্যবহার করে ফিল্টারিং বা ট্রান্সফরমেশন করতে পারেন, তবে এটি একেবারে মৌলিকভাবে নয়।

Apache Commons Collections:

  • Apache Commons Collections এ অনেক বেশি ফাংশনালিটিজ সরবরাহ করা হয়েছে, যেমন:
    • CollectionUtils: এটি একটি ইউটিলিটি ক্লাস যা কালেকশনগুলির মধ্যে ফিল্টারিং, ট্রান্সফর্মেশন, প্রেডিকেট ব্যবহার করতে সহায়তা করে।
    • IteratorUtils: এটি আপনাকে Iterator এর উপর নানা ধরনের কার্যক্রম (যেমন সংগ্রহ করা, ট্রান্সফর্মেশন) করতে সহায়তা করে।

উদাহরণ:

Collection<String> collection = Arrays.asList("apple", "banana", "cherry");
Collection<String> filtered = CollectionUtils.select(collection, new Predicate<String>() {
    public boolean evaluate(String item) {
        return item.startsWith("a");
    }
});

এখানে:

  • CollectionUtils.select ব্যবহার করে আমরা "a" দিয়ে শুরু হওয়া আইটেমগুলো ফিল্টার করেছি।

5. Immutable Collections

Java Collections Framework (JCF):

  • JCF এর মধ্যে অনেক কালেকশন মিউটেবল (পরিবর্তনযোগ্য) থাকে, যেমন ArrayList, HashMap, ইত্যাদি। Immutable কালেকশন সপোর্ট করার জন্য Java 9 থেকে List.of(), Set.of() ইত্যাদি ইমিউটেবল কনস্ট্রাক্টর এসেছে।

Apache Commons Collections:

  • Commons Collections ইমিউটেবল বা অপরিবর্তনীয় কালেকশন সরবরাহ করে। এর মাধ্যমে আপনি একটি কালেকশন তৈরি করতে পারেন যা পরিবর্তনযোগ্য নয় এবং এটি থ্রেড সেফ।

সারাংশ

Java Collections Framework (JCF) এবং Apache Commons Collections উভয়ই গুরুত্বপূর্ণ, তবে তারা ভিন্ন উদ্দেশ্যে ব্যবহৃত হয়। JCF একটি মৌলিক ও স্ট্যান্ডার্ড ডিপেনডেন্সি লাইব্রেরি যা Java-তে সাধারণ কালেকশন ব্যবস্থাপনা প্রদান করে। অপরদিকে, Apache Commons Collections Java Collections Framework এর উপর ভিত্তি করে অতিরিক্ত ডাটা স্ট্রাকচার এবং ইউটিলিটি ফাংশনালিটি প্রদান করে, যেমন MultiMap, Bag, BidiMap ইত্যাদি, যা JCF-এ নেই। এটি ফিল্টারিং, প্রেডিকেট, ট্রান্সফরমেশন, এবং Immutable Collections তৈরি করার সুবিধাও প্রদান করে।

Apache Commons Collections একটি উন্নত ফিচার এবং কাস্টমাইজেশন প্রদান করে, যা বিশেষ করে বড় এবং জটিল প্রোজেক্টগুলির জন্য উপকারী।

common.content_added_by

Apache Commons Collections এর বৈশিষ্ট্য

112
112

Apache Commons Collections একটি ওপেন সোর্স Java লাইব্রেরি যা Java Collections Framework (JCF) এর ওপর ভিত্তি করে কাজ করে এবং বিভিন্ন ডেটা স্ট্রাকচার ও ইউটিলিটি ক্লাস সরবরাহ করে। এটি Java ডেভেলপারদের জন্য একটি অত্যন্ত শক্তিশালী টুল, যা JCF এর সীমাবদ্ধতাগুলি পূর্ণ করে এবং আরও শক্তিশালী এবং নমনীয় কালেকশন ক্লাস তৈরি করতে সহায়তা করে। এটি বিশেষভাবে লজিকাল অপারেশন এবং কাস্টম ডেটা স্ট্রাকচার তৈরি করার জন্য ব্যবহৃত হয়।

Apache Commons Collections এর বৈশিষ্ট্য

  1. Additional Data Structures (অতিরিক্ত ডেটা স্ট্রাকচার):

    • Apache Commons Collections Java Collections Framework (JCF)-এর সাধারণ কালেকশন টাইপগুলির উন্নত সংস্করণ সরবরাহ করে। উদাহরণস্বরূপ, Bag, MultiMap, Iterator, Transformer, Predicate ইত্যাদি।
    • Bag (যা সাধারণত MultiSet হিসেবেও পরিচিত) একটি কালেকশন যা প্রতিটি উপাদানকে একাধিকবার ধারণ করতে সক্ষম। এটি ডুপ্লিকেট উপাদানগুলিকে ট্র্যাক করতে সক্ষম এবং একাধিক মান ধারণ করতে পারে।
    Bag bag = new HashBag();
    bag.add("apple");
    bag.add("banana");
    bag.add("apple");
    
    • MultiMap একটি ম্যাপের মতো কাজ করে, তবে একটি Key এর সাথে একাধিক মান থাকতে পারে। এটি JCF-এর Map এর উন্নত সংস্করণ।
    MultiMap multiMap = new MultiHashMap();
    multiMap.put("fruit", "apple");
    multiMap.put("fruit", "banana");
    multiMap.put("fruit", "orange");
    
  2. Collection Decorators (কলেকশন ডেকোরেটর):

    • Collection decorators আপনাকে বিদ্যমান Java collections এ অতিরিক্ত কার্যকারিতা যোগ করতে সাহায্য করে, যেমন synchronized collections, filtered collections, transformed collections ইত্যাদি।
    • উদাহরণস্বরূপ, synchronized collection ব্যবহার করার মাধ্যমে একটি সাধারণ কালেকশনকে থ্রেড-সেফ করা সম্ভব।
    List<String> list = new ArrayList<>();
    List<String> synchronizedList = Collections.synchronizedList(list);
    
  3. Predicate and Function (প্রেডিকেট এবং ফাংশন):

    • Predicate এবং Function API এর মাধ্যমে collections এর উপাদানগুলিতে লজিক অ্যাপ্লাই করা যায়।
    • Predicate ব্যবহার করে আপনি কালেকশনের উপাদানগুলির উপর শর্ত নির্ধারণ করতে পারেন এবং Function ব্যবহার করে আপনি কালেকশনের উপাদানগুলি রূপান্তর করতে পারেন।
    List<String> list = Arrays.asList("apple", "banana", "orange");
    List<String> filteredList = CollectionUtils.select(list, new Predicate() {
        public boolean evaluate(Object o) {
            return ((String) o).startsWith("a");
        }
    });
    
  4. Iterators and Iterables (ইটারেটর এবং ইটারেবল):

    • Iterator এবং Iterable ব্যবহার করে আপনি কাস্টম কালেকশন টাইপের উপরে সহজেই লুপ করতে পারেন। এটি Java এর বিল্ট-ইন কালেকশনের তুলনায় আরও বেশি কার্যকরী এবং নমনীয়।
    • IteratorUtils এবং IterableUtils ক্লাসের মাধ্যমে আপনি কাস্টম কালেকশনের উপর সহজেই অপারেশন করতে পারেন।
    Iterator<String> iterator = list.iterator();
    while (iterator.hasNext()) {
        String element = iterator.next();
        System.out.println(element);
    }
    
  5. Transformation and Filtering (রূপান্তর এবং ফিল্টারিং):

    • Transformer এবং Filter ক্লাস ব্যবহার করে আপনি কালেকশনের উপাদানগুলির উপর রূপান্তর বা ফিল্টারিং করতে পারেন। এটি একটি নির্দিষ্ট শর্তে বা লজিকের মাধ্যমে কালেকশনের উপাদানগুলিকে রূপান্তর বা ফিল্টার করতে সাহায্য করে।
    List<String> transformedList = (List<String>) CollectionUtils.collect(list, new Transformer() {
        public Object transform(Object input) {
            return ((String) input).toUpperCase();
        }
    });
    
  6. Multi-threading Support (মাল্টি-থ্রেডিং সাপোর্ট):
    • Apache Commons Collections থ্রেড-সেফ কালেকশন ডেকোরেটর সরবরাহ করে, যা আপনাকে একাধিক থ্রেডের মাধ্যমে একই কালেকশন ব্যবহার করার সুযোগ দেয়।
  7. Efficiency (কার্যক্ষমতা):
    • Commons Collections বিভিন্ন অপটিমাইজেশন সরবরাহ করে যা Java Collections Framework (JCF)-এর তুলনায় আরও কার্যকরী এবং দ্রুত ডেটা ম্যানিপুলেশন করতে সক্ষম। এটি Transformer, Predicate, Filter এর মতো ফিচার ব্যবহার করে, যা কাজের গতি বৃদ্ধি করে।

Apache Commons Collections এর কিছু জনপ্রিয় ক্লাস

  1. CollectionUtils:

    • এটি একাধিক ইউটিলিটি ফাংশন সরবরাহ করে যা collections এর জন্য ব্যবহৃত হতে পারে, যেমন কনটেইনার অ্যাকশন, ফিল্টারিং, ট্রান্সফরমেশন ইত্যাদি।
    List<String> list = Arrays.asList("apple", "banana", "orange");
    CollectionUtils.addAll(list, new String[] {"grape", "kiwi"});
    
  2. IteratorUtils:

    • এটি Iterator ইন্টারফেসের জন্য বিভিন্ন ইউটিলিটি মেথড সরবরাহ করে, যা পুনরাবৃত্তি সম্পর্কিত কাজগুলো সহজ করে তোলে।
    Iterator<String> iterator = IteratorUtils.arrayIterator(new String[] {"apple", "banana", "orange"});
    
  3. Bag:

    • একটি Bag এমন একটি কালেকশন যা একটি উপাদান একাধিক বার ধারণ করতে পারে, অর্থাৎ এটি ডুপ্লিকেট উপাদানগুলিকে ট্র্যাক করে।
    Bag bag = new HashBag();
    bag.add("apple");
    bag.add("banana");
    
  4. MultiMap:

    • একটি MultiMap একটি কীবেসড ডেটা স্ট্রাকচার যা একাধিক মানকে একটি কীর সাথে সংযুক্ত করে।
    MultiMap multiMap = new MultiHashMap();
    multiMap.put("fruit", "apple");
    multiMap.put("fruit", "banana");
    multiMap.put("fruit", "orange");
    
  5. TransformedCollection:

    • এটি একটি Collection-এর উপাদানগুলিতে একটি রূপান্তর প্রক্রিয়া অ্যাপ্লাই করে।
    Collection<String> transformed = new TransformedCollection(list, new Transformer() {
        public Object transform(Object input) {
            return ((String) input).toUpperCase();
        }
    });
    

Apache Commons Collections এর সুবিধা

  1. Advanced Data Structures:
    • Java Collections Framework (JCF)-এ আরো শক্তিশালী ডেটা স্ট্রাকচার সরবরাহ করে, যা JCF এর সীমাবদ্ধতাগুলিকে পূর্ণ করে।
  2. Enhanced Functionality:
    • Predicates, Functions, Filters, এবং Transformers এর মাধ্যমে আপনাকে আরও উন্নত এবং নমনীয় অপারেশন করতে সহায়তা করে।
  3. Compatibility with JCF:
    • এটি Java Collections Framework (JCF)-এর সাথে সম্পূর্ণরূপে সামঞ্জস্যপূর্ণ এবং এটি সহজেই আপনার বিদ্যমান JCF কালেকশনের সাথে কাজ করতে পারে।
  4. Efficiency:
    • দ্রুত অপারেশন এবং পারফরম্যান্স অপ্টিমাইজেশন প্রদান করে।
  5. Flexible Integration:
    • আপনি আপনার JCF কালেকশনগুলির সাথে সহজেই ইন্টিগ্রেট করতে পারেন এবং আরও কার্যকরী এবং নমনীয় কালেকশন টাইপ ব্যবহার করতে পারেন।

Apache Commons Collections হল একটি শক্তিশালী এবং নমনীয় Java লাইব্রেরি যা Java Collections Framework (JCF)-এর ক্ষমতাকে বাড়িয়ে দেয়। এটি উন্নত ডেটা স্ট্রাকচার, ফাংশনালিটিজ, ইউটিলিটি ক্লাস, এবং অপারেশন সরবরাহ করে যা ডেভেলপারদের জন্য ডেটা ম্যানিপুলেশন আরও সহজ এবং কার্যকরী করে তোলে। আপনি যদি কাস্টম ডেটা স্ট্রাকচার বা অতিরিক্ত ফিচার খুঁজছেন, তাহলে Commons Collections আপনার জন্য একটি অসাধারণ টুল হতে পারে।

common.content_added_by
টপ রেটেড অ্যাপ

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

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

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