Apache Commons Collections লাইব্রেরি একাধিক বিশেষ ধরনের ডেটা স্ট্রাকচার সরবরাহ করে, যেগুলি বিশেষ পরিস্থিতিতে কাজ করার জন্য তৈরি করা হয়। এই ডেটা স্ট্রাকচারগুলির মধ্যে BoundedBuffer, CircularFifoBuffer, এবং UnboundedFifoBuffer উল্লেখযোগ্য। এগুলি মূলত FIFO (First-In, First-Out) পদ্ধতিতে কাজ করে এবং এগুলোর ব্যবহারের ক্ষেত্রে আপনার নির্দিষ্ট প্রয়োজন অনুযায়ী বাউন্ডেড (সীমাবদ্ধ) অথবা আনবাউন্ডেড (সীমাহীন) বাফার প্রয়োজন হতে পারে।
1. BoundedBuffer
BoundedBuffer একটি বাফার যা একটি নির্দিষ্ট আকারে সীমাবদ্ধ। এর মানে হল যে এটি একটি নির্দিষ্ট সীমা নির্ধারণ করে এবং যখন বাফার পূর্ণ হয়ে যায়, তখন নতুন উপাদান প্রবেশ করতে গেলে পুরনো উপাদানগুলো সরিয়ে ফেলা হয়। এটি সাধারণত producer-consumer প্যাটার্নে ব্যবহৃত হয় যেখানে একটি প্রোডিউসার (producer) উপাদান প্রদান করে এবং কনজিউমার (consumer) সেগুলি গ্রহণ করে।
BoundedBuffer এর বৈশিষ্ট্য:
- Synchronized: এটি থ্রেড-সেফ এবং একাধিক থ্রেডের মধ্যে নিরাপদভাবে কাজ করতে পারে।
- Fixed Size: এটি একটি নির্দিষ্ট আকারের বাফার তৈরি করে, যখন আকার পূর্ণ হয়, তখন পুরনো উপাদানগুলিকে সরিয়ে নতুন উপাদান গ্রহণ করে।
- Producer-Consumer Model: এটি প্রোডিউসার এবং কনজিউমার মডেলে ব্যবহৃত হয় যেখানে উপাদানগুলো একে অপরকে প্রদান বা গ্রহণ করতে থাকে।
BoundedBuffer উদাহরণ:
import org.apache.commons.collections4.buffer.BoundedBuffer;
import org.apache.commons.collections4.buffer.CircularFifoBuffer;
public class BoundedBufferExample {
public static void main(String[] args) {
// Create a BoundedBuffer of size 3
BoundedBuffer<String> buffer = new CircularFifoBuffer<>(3);
// Add elements
buffer.add("apple");
buffer.add("banana");
buffer.add("orange");
// At this point, the buffer is full. Adding a new element will remove the oldest element
buffer.add("grape");
// Print the buffer contents
System.out.println("Buffer Contents: " + buffer);
}
}
Output:
Buffer Contents: [banana, orange, grape]
ব্যাখ্যা:
- এখানে,
BoundedBufferএর আকার ৩ নির্ধারণ করা হয়েছে, এবং এর মধ্যে সর্বোচ্চ ৩টি উপাদান থাকতে পারে। - যখন
grapeযোগ করা হয়, তখনappleসরিয়ে ফেলা হয়, কারণ বাফার পূর্ণ হয়ে গেছে।
2. CircularFifoBuffer
CircularFifoBuffer একটি বিশেষ ধরনের বাফার যা একটি সীমিত আকারে উপাদান ধারণ করে এবং FIFO (First-In, First-Out) পদ্ধতিতে কাজ করে। যখন বাফার পূর্ণ হয় এবং নতুন উপাদান যোগ করা হয়, তখন প্রথম যোগ করা উপাদানটি (oldest element) সরিয়ে ফেলা হয়। এটি একটি বাউন্ডেড বাফার, যেখানে ডেটা একটি circular queue এর মতো সঞ্চালিত হয়।
CircularFifoBuffer এর বৈশিষ্ট্য:
- Fixed Size: এটি একটি নির্দিষ্ট আকারের বাফার ব্যবহার করে।
- FIFO: পুরনো উপাদানকে সরিয়ে নতুন উপাদান গ্রহণ করে।
- Efficient: এটি দ্রুতভাবে নতুন উপাদানগুলিকে যোগ এবং পুরনো উপাদানগুলিকে সরিয়ে দেয়।
CircularFifoBuffer উদাহরণ:
import org.apache.commons.collections4.buffer.CircularFifoBuffer;
public class CircularFifoBufferExample {
public static void main(String[] args) {
// Create a CircularFifoBuffer of size 3
CircularFifoBuffer<String> buffer = new CircularFifoBuffer<>(3);
// Add elements
buffer.add("apple");
buffer.add("banana");
buffer.add("orange");
// At this point, the buffer is full. Adding a new element will remove the oldest element
buffer.add("grape");
// Print the buffer contents
System.out.println("CircularFifoBuffer Contents: " + buffer);
}
}
Output:
CircularFifoBuffer Contents: [banana, orange, grape]
ব্যাখ্যা:
CircularFifoBufferএর আকার ৩ নির্ধারণ করা হয়েছে এবং এতে সর্বোচ্চ ৩টি উপাদান থাকতে পারে।- যখন
grapeযোগ করা হয়, তখনappleসরিয়ে ফেলা হয়, কারণ এটি বাফারের সবচেয়ে পুরনো উপাদান।
3. UnboundedFifoBuffer
UnboundedFifoBuffer একটি FIFO (First-In, First-Out) বাফার যা কোনও আকারের সীমা ছাড়াই উপাদান ধারণ করতে পারে। এর মানে হল যে এটি কোনও নির্দিষ্ট সীমার মধ্যে সীমাবদ্ধ নয় এবং ইনপুট হিসাবে যতটুকু ডেটা আসে তা সরাসরি গ্রহণ করে।
UnboundedFifoBuffer এর বৈশিষ্ট্য:
- Unbounded: এটি আকারের সীমা ছাড়াই ডেটা ধারণ করতে পারে।
- FIFO: এটি FIFO পদ্ধতিতে কাজ করে, অর্থাৎ প্রথমে যোগ করা উপাদানটি প্রথমে বের হয়ে আসে।
- Dynamic Size: এটি ডেটার আকারের উপর নির্ভর করে আকার বাড়াতে বা কমাতে পারে।
UnboundedFifoBuffer উদাহরণ:
import org.apache.commons.collections4.buffer.UnboundedFifoBuffer;
public class UnboundedFifoBufferExample {
public static void main(String[] args) {
// Create an UnboundedFifoBuffer
UnboundedFifoBuffer<String> buffer = new UnboundedFifoBuffer<>();
// Add elements
buffer.add("apple");
buffer.add("banana");
buffer.add("orange");
// Adding more elements, no size limit
buffer.add("grape");
buffer.add("kiwi");
// Print the buffer contents
System.out.println("UnboundedFifoBuffer Contents: " + buffer);
}
}
Output:
UnboundedFifoBuffer Contents: [apple, banana, orange, grape, kiwi]
ব্যাখ্যা:
UnboundedFifoBufferআকারের কোনও সীমা ছাড়াই উপাদান ধারণ করতে পারে, এবং এটি FIFO পদ্ধতিতে কাজ করে।- এখানে, কোন উপাদান সরানো হয় না কারণ এটি একটি আনবাউন্ডেড বাফার এবং এতে যতটুকু উপাদান আসে, ততটুকু সঞ্চিত থাকে।
BoundedBuffer, CircularFifoBuffer, এবং UnboundedFifoBuffer এর মধ্যে পার্থক্য:
| Feature | BoundedBuffer | CircularFifoBuffer | UnboundedFifoBuffer |
|---|---|---|---|
| Size Limit | Fixed size (bounded) | Fixed size (bounded) | No size limit (unbounded) |
| Data Removal | Removes the oldest element when full | Removes the oldest element when full | No removal needed, grows dynamically |
| FIFO | Yes, maintains first-in, first-out order | Yes, maintains first-in, first-out order | Yes, maintains first-in, first-out order |
| Usage | Useful for fixed-size data buffer in producer-consumer models | Useful for scenarios where data is cyclic and old data is replaced | Useful for scenarios where the data buffer is unlimited |
| Memory | Limited memory usage based on fixed size | Fixed memory usage based on buffer size | Dynamic memory usage based on data volume |
Conclusion
BoundedBuffer, CircularFifoBuffer, এবং UnboundedFifoBuffer হল FIFO (First-In, First-Out) বাফারগুলির বিভিন্ন ধরনের বাস্তবায়ন যা Apache Commons Collections লাইব্রেরি সরবরাহ করে।
- BoundedBuffer একটি নির্দিষ্ট আকারে সীমাবদ্ধ বাফার, যা পুরনো উপাদানগুলি সরিয়ে নতুন উপাদান গ্রহণ করে।
- CircularFifoBuffer একটি নির্দিষ্ট আকারের সাইক্লিক বাফার, যা FIFO পদ্ধতিতে কাজ করে এবং যখন এটি পূর্ণ হয় তখন পুরনো উপাদানগুলি সরিয়ে ফেলে।
- UnboundedFifoBuffer আকারের সীমা ছাড়াই উপাদান ধারণ করে এবং FIFO পদ্ধতিতে চলতে থাকে।
এই বাফারগুলির মধ্যে পার্থক্য বুঝে আপনি আপনার প্রজেক্টের প্রয়োজন অনুযায়ী উপযুক্ত বাফার নির্বাচন করতে পারবেন।
Read more