Java-তে কালেকশন ফ্রেমওয়ার্ক হলো একটি স্ট্যান্ডার্ডাইজড আর্কিটেকচার যা বিভিন্ন ধরনের ডেটা স্ট্রাকচার এবং অ্যালগরিদম সরবরাহ করে, যা ডেটা সঞ্চয়, অ্যাক্সেস, এবং ম্যানিপুলেশন সহজ করে তোলে। এটি এমন এক সেট ইন্টারফেস এবং ক্লাস নিয়ে গঠিত যা ডেটা সংগ্রহের বিভিন্ন ধরনের অপারেশন পরিচালনা করতে সহায়ক।
কালেকশন ফ্রেমওয়ার্কের প্রধান উপাদান
Java কালেকশন ফ্রেমওয়ার্কের প্রধান তিনটি ইন্টারফেস রয়েছে:
- List: অর্ডারড এবং ডুপ্লিকেট মান গ্রহণযোগ্য সংগ্রহ।
- Set: অর্ডারড নয় এবং ডুপ্লিকেট মান গ্রহণযোগ্য নয়।
- Map: কী-ভ্যালু জোড়া সংরক্ষণ করে, যেখানে কী ডুপ্লিকেট হতে পারে না।
১. List ইন্টারফেস
List ইন্টারফেস এমন এক ধরনের সংগ্রহ যা ইনডেক্স-ভিত্তিক এবং ডুপ্লিকেট মান অনুমোদন করে। এটি একটি অর্ডারড সংগ্রহ, অর্থাৎ ইনডেক্স অনুযায়ী মান সংরক্ষণ করা হয়।
জনপ্রিয় List ইমপ্লিমেন্টেশনসমূহ
- ArrayList: ডায়নামিক অ্যারে; দ্রুত অ্যাক্সেস, ধীর ইনসার্ট এবং ডিলিট।
- LinkedList: ডাবল-লিঙ্কড লিস্ট; দ্রুত ইনসার্ট এবং ডিলিট, কিন্তু ধীর অ্যাক্সেস।
- Vector: থ্রেড-নিরাপদ ArrayList; সিঙ্গেল থ্রেডেড পরিবেশে খুব একটা ব্যবহৃত হয় না।
উদাহরণ: ArrayList ব্যবহার
import java.util.ArrayList;
public class ListExample {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Orange");
System.out.println("List: " + list);
list.remove("Banana");
System.out.println("After removing Banana: " + list);
}
}
আউটপুট:
List: [Apple, Banana, Orange]
After removing Banana: [Apple, Orange]
২. Set ইন্টারফেস
Set ইন্টারফেস এমন এক ধরনের সংগ্রহ যা ডুপ্লিকেট মান অনুমোদন করে না। এটি সাধারণত অর্ডারেড হয় না, তবে কিছু Set ইমপ্লিমেন্টেশন অর্ডার সংরক্ষণ করে।
জনপ্রিয় Set ইমপ্লিমেন্টেশনসমূহ
- HashSet: হ্যাশিং ব্যবহার করে ডেটা সংরক্ষণ করে, অর্ডার সংরক্ষণ করে না, এবং দ্রুত ইনসার্ট এবং অ্যাক্সেস প্রদান করে।
- LinkedHashSet: হ্যাশসেটের মতো, তবে ইনসার্ট অর্ডার সংরক্ষণ করে।
- TreeSet: বাইনারি ট্রি ব্যবহার করে ডেটা সংরক্ষণ করে এবং মান ক্রমানুসারে থাকে।
উদাহরণ: HashSet ব্যবহার
import java.util.HashSet;
public class SetExample {
public static void main(String[] args) {
HashSet<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Apple"); // ডুপ্লিকেট যোগ করার চেষ্টা
System.out.println("Set: " + set);
}
}
আউটপুট:
Set: [Apple, Banana]
ব্যাখ্যা: এখানে Apple দুইবার যোগ করার চেষ্টা করা হয়েছে, কিন্তু Set ডুপ্লিকেট মান অনুমোদন করে না, তাই একটি মাত্র Apple যোগ হয়।
৩. Map ইন্টারফেস
Map ইন্টারফেস কী-ভ্যালু জোড়া সংরক্ষণ করে, যেখানে কীগুলো ডুপ্লিকেট হতে পারে না, তবে ভ্যালুতে ডুপ্লিকেট থাকতে পারে। এটি ডেটা দ্রুত খুঁজে পেতে সহায়ক।
জনপ্রিয় Map ইমপ্লিমেন্টেশনসমূহ
- HashMap: কী-ভ্যালু জোড়া সংরক্ষণ করে, অর্ডার সংরক্ষণ করে না এবং দ্রুত অ্যাক্সেস প্রদান করে।
- LinkedHashMap: কী-ভ্যালু জোড়া ইনসার্ট অর্ডার অনুযায়ী সংরক্ষণ করে।
- TreeMap: কী ক্রমানুসারে সংরক্ষণ করে এবং
NavigableMapইন্টারফেস বাস্তবায়ন করে।
উদাহরণ: HashMap ব্যবহার
import java.util.HashMap;
public class MapExample {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<>();
map.put("Apple", 10);
map.put("Banana", 20);
map.put("Orange", 15);
System.out.println("Map: " + map);
System.out.println("Apple count: " + map.get("Apple"));
}
}
আউটপুট:
Map: {Apple=10, Banana=20, Orange=15}
Apple count: 10
কালেকশন ফ্রেমওয়ার্কের ইন্টারফেসের শ্রেণীক্রম (Hierarchy)
- Collection Interface: এটি Java Collection Framework-এর মূল ইন্টারফেস।
- List: ArrayList, LinkedList, Vector
- Set: HashSet, LinkedHashSet, TreeSet
- Map Interface: এটি কী-ভ্যালু জোড়া সংরক্ষণ করতে ব্যবহৃত হয়।
- HashMap, LinkedHashMap, TreeMap
কালেকশন ফ্রেমওয়ার্কের কিছু গুরুত্বপূর্ণ মেথড
List মেথডসমূহ
add(element): List-এ নতুন উপাদান যোগ করা।remove(element): নির্দিষ্ট উপাদান মুছে ফেলা।get(index): নির্দিষ্ট ইনডেক্সের উপাদান ফিরে পাওয়া।size(): List-এর মোট উপাদানের সংখ্যা।
Set মেথডসমূহ
add(element): Set-এ নতুন উপাদান যোগ করা।remove(element): নির্দিষ্ট উপাদান মুছে ফেলা।contains(element): নির্দিষ্ট উপাদান আছে কিনা তা যাচাই করা।size(): Set-এর মোট উপাদানের সংখ্যা।
Map মেথডসমূহ
put(key, value): Map-এ নতুন কী-ভ্যালু জোড়া যোগ করা।get(key): নির্দিষ্ট কী-এর মান ফিরে পাওয়া।remove(key): নির্দিষ্ট কী-ভ্যালু জোড়া মুছে ফেলা।keySet(): সমস্ত কী-এর একটি Set প্রদান করা।
কালেকশন ফ্রেমওয়ার্কের সুবিধা
- ডেটা সংগঠন: বিভিন্ন ধরনের ডেটা স্ট্রাকচার ব্যবহার করে ডেটা সংগঠিত ও সংরক্ষণ করা যায়।
- পুনরায় ব্যবহারযোগ্যতা: কালেকশন ফ্রেমওয়ার্কের ক্লাসগুলো অনেক ক্ষেত্রে পুনরায় ব্যবহারযোগ্য।
- সহজ ম্যানিপুলেশন: ডেটা যোগ, মুছে ফেলা, খোঁজা, এবং সাজানোর মেথড সমূহ সহজ ম্যানিপুলেশন সম্ভব করে।
- ফ্লেক্সিবিলিটি: বিভিন্ন প্রয়োজন অনুযায়ী উপযুক্ত ডেটা স্ট্রাকচার নির্বাচন করে কাজ করা যায়।
সারসংক্ষেপ
Java তে কালেকশন ফ্রেমওয়ার্ক বিভিন্ন ধরনের ডেটা স্ট্রাকচার প্রদান করে, যা ডেটা ম্যানেজমেন্ট সহজ করে তোলে। List, Set, এবং Map এর মতো ইন্টারফেস এবং ArrayList, HashSet, HashMap এর মতো ক্লাসের মাধ্যমে ডেটা সংরক্ষণ, খোঁজা এবং পরিবর্তন করা সহজ হয়। কালেকশন ফ্রেমওয়ার্ক প্রোগ্রামের কার্যক্ষমতা ও কার্যকারিতা বাড়াতে সহায়ক।
লিস্ট (List), সেট (Set) এবং ম্যাপ (Map) হলো Java-র কিছু গুরুত্বপূর্ণ ডেটা স্ট্রাকচার, যা Java Collections Framework এর অন্তর্ভুক্ত। এরা বিভিন্ন ধরনের ডেটা ম্যানেজমেন্ট এবং অ্যাক্সেসে সহায়ক।
১. লিস্ট (List)
List হলো এমন একটি ডেটা স্ট্রাকচার যা একই ধরনের ডেটা সংরক্ষণ করে এবং ইনডেক্সের মাধ্যমে প্রতিটি উপাদান অ্যাক্সেসযোগ্য করে। এটি ডুপ্লিকেট মান রাখতে সক্ষম এবং ডেটা ক্রমানুসারে সংরক্ষণ করে।
লিস্টের বৈশিষ্ট্য
- ইনডেক্সিং: প্রতিটি উপাদান ইনডেক্সের মাধ্যমে অ্যাক্সেস করা যায়।
- ডুপ্লিকেট মান: একই লিস্টে একাধিকবার একই মান রাখা যায়।
- ক্রমানুসারে সংরক্ষণ: ডেটা ইনপুট ক্রমে সংরক্ষিত থাকে।
লিস্টের উদাহরণ (ArrayList)
import java.util.ArrayList;
import java.util.List;
public class ListExample {
public static void main(String[] args) {
List<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
names.add("Alice"); // ডুপ্লিকেট মান গ্রহণ করা যাবে
System.out.println("Names List: " + names);
System.out.println("Name at index 1: " + names.get(1));
}
}
আউটপুট:
Names List: [Alice, Bob, Alice]
Name at index 1: Bob
ব্যাখ্যা:
- এখানে
ArrayListক্লাস ব্যবহার করে একটিListতৈরি করা হয়েছে। namesলিস্টেAliceনামে দুটি ডুপ্লিকেট মান রাখা হয়েছে, এবং ইনডেক্সের মাধ্যমে প্রতিটি উপাদান অ্যাক্সেস করা হয়েছে।
২. সেট (Set)
Set হলো এমন একটি ডেটা স্ট্রাকচার যা কোনো ডুপ্লিকেট মান রাখে না এবং এলিমেন্টগুলোকে ক্রমহীনভাবে সংরক্ষণ করে। Set সাধারণত ইউনিক ভ্যালু সংরক্ষণে ব্যবহৃত হয়, যেমন আইডি, ইউজারনেম ইত্যাদি।
সেটের বৈশিষ্ট্য
- ডুপ্লিকেট মান রাখে না: একই মান একাধিকবার যোগ করলে সেটে কেবল একটি মানই থাকবে।
- ক্রমহীনভাবে সংরক্ষণ: সাধারণত মানগুলো ক্রমহীনভাবে সংরক্ষণ করা হয়, যদিও
LinkedHashSetএবংTreeSetনির্দিষ্ট ক্রমে মান রাখতে পারে।
সেটের উদাহরণ (HashSet)
import java.util.HashSet;
import java.util.Set;
public class SetExample {
public static void main(String[] args) {
Set<String> uniqueNames = new HashSet<>();
uniqueNames.add("Alice");
uniqueNames.add("Bob");
uniqueNames.add("Alice"); // ডুপ্লিকেট মান যোগ হলেও একবারই থাকবে
System.out.println("Unique Names Set: " + uniqueNames);
}
}
আউটপুট:
Unique Names Set: [Alice, Bob]
ব্যাখ্যা:
- এখানে
HashSetব্যবহার করে একটিSetতৈরি করা হয়েছে। uniqueNamesসেটেAliceদুইবার যোগ করা হলেও সেটে কেবল একবারই সংরক্ষিত হয়েছে।
৩. ম্যাপ (Map)
Map হলো এমন একটি ডেটা স্ট্রাকচার যা key-value পেয়ারে ডেটা সংরক্ষণ করে। Map এ প্রতিটি কী ইউনিক হতে হবে, তবে বিভিন্ন কী-এর জন্য একই ভ্যালু থাকতে পারে। Map সাধারণত ডেটা খুঁজে বের করতে ব্যবহৃত হয়, যেমন কোনো আইডি দিয়ে নির্দিষ্ট ইউজার খোঁজা।
ম্যাপের বৈশিষ্ট্য
- Key-Value পেয়ার:
Mapএ ডেটা কী এবং মান (key-value) হিসেবে সংরক্ষিত হয়। - ইউনিক কী: প্রতিটি কী একবারই থাকতে পারে, তবে মানে ডুপ্লিকেট থাকা সম্ভব।
- কী এর মাধ্যমে দ্রুত অ্যাক্সেস: কী ব্যবহার করে নির্দিষ্ট মান দ্রুত অ্যাক্সেস করা যায়।
ম্যাপের উদাহরণ (HashMap)
import java.util.HashMap;
import java.util.Map;
public class MapExample {
public static void main(String[] args) {
Map<Integer, String> idToName = new HashMap<>();
idToName.put(1, "Alice");
idToName.put(2, "Bob");
idToName.put(3, "Charlie");
idToName.put(1, "David"); // কী ১ এর জন্য নতুন মান প্রদান করলে পুরনো মান প্রতিস্থাপিত হবে
System.out.println("ID to Name Map: " + idToName);
System.out.println("Name with ID 2: " + idToName.get(2));
}
}
আউটপুট:
ID to Name Map: {1=David, 2=Bob, 3=Charlie}
Name with ID 2: Bob
ব্যাখ্যা:
- এখানে
HashMapব্যবহার করে একটিMapতৈরি করা হয়েছে, যা Integer কী এবং String মান ধারণ করে। put()মেথড দিয়ে নতুন কী-মান পেয়ার যোগ করা হয়েছে এবং একই কী (১) এর জন্য মান আপডেট করা হয়েছে।
সংক্ষেপে লিস্ট, সেট এবং ম্যাপের তুলনা
| বৈশিষ্ট্য | List | Set | Map |
|---|---|---|---|
| অর্ডার মেইনটেন | ইনপুট ক্রম মেইনটেন করে | সাধারণত অর্ডার মেইনটেন করে না | কী-ভিত্তিক সংরক্ষণ; নির্দিষ্ট ক্রম নয় |
| ডুপ্লিকেট এলিমেন্ট | অনুমোদিত | অনুমোদিত নয় | কী ইউনিক হতে হবে, তবে মানে ডুপ্লিকেট থাকতে পারে |
| ডেটা অ্যাক্সেস | ইনডেক্সের মাধ্যমে অ্যাক্সেসযোগ্য | ইনডেক্স নেই | কী ব্যবহার করে মান অ্যাক্সেস করা যায় |
| **প্রধান ইমপ্লিমেন্টেশন | ArrayList, LinkedList | HashSet, LinkedHashSet, TreeSet | HashMap, LinkedHashMap, TreeMap |
লিস্ট, সেট এবং ম্যাপের ব্যবহার
- List: যেসব ক্ষেত্রে এলিমেন্ট ক্রমসহ রাখতে হয় এবং ডুপ্লিকেট এলিমেন্ট সংরক্ষণ করতে হয়, যেমন ছাত্রদের নামের তালিকা।
- Set: যেসব ক্ষেত্রে ইউনিক মান সংরক্ষণ করতে হয় এবং ক্রম গুরুত্বপূর্ণ নয়, যেমন ইউনিক আইডি বা ইমেইল সংরক্ষণ।
- Map: যেসব ক্ষেত্রে key-value পেয়ার হিসেবে ডেটা সংরক্ষণ করতে হয় এবং দ্রুত খোঁজার প্রয়োজন হয়, যেমন ID দিয়ে নির্দিষ্ট নাম খোঁজা।
সারসংক্ষেপ
- List: ক্রমানুসারে ডেটা সংরক্ষণ এবং ডুপ্লিকেট মান গ্রহণ করে।
- Set: ইউনিক মান সংরক্ষণ করে এবং সাধারণত ক্রমহীনভাবে ডেটা সংরক্ষণ করে।
- Map: key-value পেয়ারে ডেটা সংরক্ষণ করে, যেখানে কী ইউনিক থাকতে হয়।
Java-তে লিস্ট, সেট, এবং ম্যাপ ব্যবহার করে বিভিন্ন ধরনের ডেটা ম্যানেজমেন্ট এবং অ্যাক্সেস সহজ হয়, যা প্রোগ্রামের কার্যক্ষমতা এবং স্থায়িত্ব নিশ্চিত করে।
Java তে ArrayList, HashSet, এবং HashMap হলো ডেটা স্ট্রাকচার বা কালেকশন ক্লাস, যা বিভিন্ন ধরনের ডেটা সংরক্ষণ এবং পরিচালনা করতে ব্যবহৃত হয়। এই প্রতিটি ক্লাসের নিজস্ব বৈশিষ্ট্য এবং ব্যবহার পদ্ধতি রয়েছে, যা বিভিন্ন পরিস্থিতিতে সুবিধাজনক হয়।
১. ArrayList
ArrayList হলো Java এর একটি ডায়নামিক অ্যারে যা List ইন্টারফেসের অংশ এবং এটি ইনডেক্স ভিত্তিক। এটি এমন এক ধরনের সংগ্রহ যেখানে একই ধরনের মান ইনডেক্সের মাধ্যমে সংরক্ষণ ও অ্যাক্সেস করা যায়।
বৈশিষ্ট্য:
- ডুপ্লিকেট মান অনুমোদিত।
- ইনডেক্স ভিত্তিক, অর্থাৎ প্রতিটি উপাদানের নির্দিষ্ট অবস্থান রয়েছে।
- ইনসার্ট, অ্যাক্সেস এবং মুছে ফেলা সহজ।
- সাধারণত একক-থ্রেডেড পরিবেশে ব্যবহৃত হয়।
ArrayList ব্যবহার উদাহরণ:
import java.util.ArrayList;
public class ArrayListExample {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Orange");
// ইনডেক্স এর মাধ্যমে অ্যাক্সেস
System.out.println("Element at index 1: " + list.get(1)); // Output: Banana
// লুপ ব্যবহার করে সমস্ত উপাদান দেখানো
System.out.println("ArrayList elements:");
for (String fruit : list) {
System.out.println(fruit);
}
}
}
আউটপুট:
Element at index 1: Banana
ArrayList elements:
Apple
Banana
Orange
২. HashSet
HashSet হলো Java এর একটি সেট, যা ডুপ্লিকেট মান গ্রহণ করে না এবং Set ইন্টারফেসের অংশ। এটি হ্যাশিং ব্যবহার করে ডেটা সংরক্ষণ করে এবং ইনডেক্স মুক্ত, অর্থাৎ উপাদানগুলোর ইনডেক্স নেই।
বৈশিষ্ট্য:
- ডুপ্লিকেট মান অনুমোদিত নয়।
- অর্ডার সংরক্ষণ করে না, অর্থাৎ উপাদানের সংরক্ষণের ক্রম অপরিবর্তনশীল।
- সাধারণত দ্রুত ইনসার্ট, অ্যাক্সেস এবং মুছে ফেলা সম্ভব।
- হ্যাশিং ব্যবহার করে উপাদান সংরক্ষণ করা হয়।
HashSet ব্যবহার উদাহরণ:
import java.util.HashSet;
public class HashSetExample {
public static void main(String[] args) {
HashSet<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Apple"); // ডুপ্লিকেট যোগ করার চেষ্টা
set.add("Orange");
System.out.println("HashSet elements:");
for (String fruit : set) {
System.out.println(fruit);
}
}
}
আউটপুট:
HashSet elements:
Banana
Apple
Orange
ব্যাখ্যা: HashSet ডুপ্লিকেট মান গ্রহণ করে না, তাই একাধিক Apple যোগ হলেও কেবল একটি Apple প্রদর্শিত হয়েছে।
৩. HashMap
HashMap হলো একটি কী-ভ্যালু জোড়ার ডেটা স্ট্রাকচার যা Map ইন্টারফেসের অংশ। এটি কী ব্যবহার করে মান সংরক্ষণ করে এবং প্রতিটি কী অনন্য হতে হবে।
বৈশিষ্ট্য:
- ডুপ্লিকেট কী অনুমোদিত নয়, তবে মানে ডুপ্লিকেট থাকতে পারে।
- অর্ডার সংরক্ষণ করে না।
- হ্যাশিং ব্যবহার করে ডেটা দ্রুত খুঁজে পাওয়া যায়।
- একক-থ্রেডেড পরিবেশে ব্যবহৃত হয় এবং থ্রেড নিরাপদ নয়।
HashMap ব্যবহার উদাহরণ:
import java.util.HashMap;
public class HashMapExample {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<>();
map.put("Apple", 10);
map.put("Banana", 20);
map.put("Orange", 15);
// নির্দিষ্ট কী-এ মান প্রিন্ট করা
System.out.println("Apple count: " + map.get("Apple"));
// সমস্ত কী-ভ্যালু জোড়া দেখানো
System.out.println("HashMap elements:");
for (String key : map.keySet()) {
System.out.println(key + ": " + map.get(key));
}
}
}
আউটপুট:
Apple count: 10
HashMap elements:
Banana: 20
Apple: 10
Orange: 15
ArrayList, HashSet, এবং HashMap এর পার্থক্য
| বৈশিষ্ট্য | ArrayList | HashSet | HashMap |
|---|---|---|---|
| ইন্টারফেস | List | Set | Map |
| ডুপ্লিকেট মান | অনুমোদিত | অনুমোদিত নয় | কীগুলো ডুপ্লিকেট নয়, মানে ডুপ্লিকেট থাকতে পারে |
| অর্ডার | ইনডেক্স ক্রম সংরক্ষণ করা হয় | সংরক্ষণ করা হয় না | সংরক্ষণ করা হয় না |
| অ্যাক্সেস টাইপ | ইনডেক্স মাধ্যমে | সরাসরি হ্যাশিং | কী-এর মাধ্যমে |
| ব্যবহার | ইনডেক্স ভিত্তিক ডেটা স্টোরেজ | ডুপ্লিকেট ছাড়া ডেটা সংরক্ষণ | কী-ভ্যালু জোড়া সংরক্ষণ |
কোনটি কখন ব্যবহার করবেন?
- ArrayList: ইনডেক্স ভিত্তিক অ্যাক্সেস প্রয়োজন হলে এবং ডুপ্লিকেট মান অনুমোদিত হলে।
- HashSet: ডুপ্লিকেট ছাড়া দ্রুত ইনসার্ট এবং অনুসন্ধান প্রয়োজন হলে।
- HashMap: কী-ভ্যালু জোড়া সংরক্ষণ করতে এবং দ্রুত মান খুঁজে পেতে চাইলে।
সারসংক্ষেপ
Java-তে ArrayList, HashSet, এবং HashMap কালেকশন ফ্রেমওয়ার্কের তিনটি প্রধান ক্লাস যা বিভিন্ন ধরনের ডেটা সংরক্ষণ এবং পরিচালনা করতে ব্যবহৃত হয়। ArrayList ইনডেক্স ভিত্তিক একটি তালিকা, HashSet ডুপ্লিকেটবিহীন একটি সেট, এবং HashMap কী-ভ্যালু জোড়া সংরক্ষণ করে। এগুলি প্রোগ্রামে ডেটা সংরক্ষণ, অনুসন্ধান, এবং পরিচালনাকে আরও সহজ এবং কার্যকরী করে।
ইটারেটর (Iterator) হলো Java Collections Framework এর একটি ইন্টারফেস, যা কালেকশনের উপাদানগুলোর উপর একের পর এক অ্যাক্সেস করতে সাহায্য করে। Iterator ব্যবহার করে একটি কালেকশনের প্রতিটি এলিমেন্ট একবার করে অ্যাক্সেস করা যায়, যা সাধারণত লিস্ট, সেট, এবং ম্যাপ এর উপাদানগুলোর জন্য ব্যবহার করা হয়।
কেন ইটারেটর প্রয়োজন?
- ক্রমানুসারে ডেটা অ্যাক্সেস: কালেকশনের প্রতিটি উপাদানে ক্রমানুসারে অ্যাক্সেস পাওয়া যায়।
- তথ্য মুছে ফেলা:
Iteratorব্যবহার করে কোন কালেকশন থেকে ডেটা মুছে ফেলা যায়। - কোড মডুলার এবং সহজ করা:
Iteratorব্যবহার করে কালেকশনের সাথে লুপিং সহজ হয় এবং কোড আরও সহজবোধ্য হয়।
Iterator এর প্রধান মেথড
hasNext(): পরবর্তী উপাদান আছে কি না তা যাচাই করে এবংtrueবাfalseরিটার্ন করে।next(): পরবর্তী উপাদানে চলে যায় এবং সেই উপাদানটি রিটার্ন করে।remove(): বর্তমান উপাদানটি মুছে ফেলে।
Iterator ব্যবহার করে উদাহরণ
উদাহরণ ১: ArrayList এর উপর ইটারেটর ব্যবহার
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class IteratorExample {
public static void main(String[] args) {
List<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
names.add("Charlie");
Iterator<String> iterator = names.iterator();
System.out.println("Names List:");
while (iterator.hasNext()) {
String name = iterator.next();
System.out.println(name);
}
}
}
আউটপুট:
Names List:
Alice
Bob
Charlie
ব্যাখ্যা:
- এখানে
ArrayListএnamesনামের লিস্ট তৈরি করা হয়েছে। names.iterator()দিয়েIteratorতৈরি করা হয়েছে, যাnamesলিস্টের প্রতিটি উপাদানকে একে একে অ্যাক্সেস করতে পারবে।whileলুপেhasNext()মেথড দিয়ে পরবর্তী উপাদান আছে কিনা যাচাই করা হয়েছে এবংnext()মেথড দিয়ে উপাদানগুলো প্রিন্ট করা হয়েছে।
উদাহরণ ২: Set এর উপর ইটারেটর ব্যবহার
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class IteratorSetExample {
public static void main(String[] args) {
Set<Integer> numbers = new HashSet<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
Iterator<Integer> iterator = numbers.iterator();
System.out.println("Numbers Set:");
while (iterator.hasNext()) {
int number = iterator.next();
System.out.println(number);
}
}
}
আউটপুট:
Numbers Set:
1
2
3
ব্যাখ্যা:
- এখানে
HashSetএnumbersনামের একটি সেট তৈরি করা হয়েছে। numbers.iterator()দিয়েIteratorতৈরি করা হয়েছে, যা সেটের প্রতিটি উপাদানকে অ্যাক্সেস করতে পারবে।whileলুপেhasNext()এবংnext()মেথড ব্যবহার করে প্রতিটি উপাদান প্রিন্ট করা হয়েছে।
উদাহরণ ৩: ইটারেটর ব্যবহার করে উপাদান মুছে ফেলা
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class RemoveWithIterator {
public static void main(String[] args) {
List<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
names.add("Charlie");
Iterator<String> iterator = names.iterator();
while (iterator.hasNext()) {
String name = iterator.next();
if (name.equals("Bob")) {
iterator.remove(); // "Bob" মুছে ফেলা হবে
}
}
System.out.println("Names List after removal: " + names);
}
}
আউটপুট:
Names List after removal: [Alice, Charlie]
ব্যাখ্যা:
iterator.remove()মেথড ব্যবহার করেBobউপাদানটি মুছে ফেলা হয়েছে।- ইটারেটর ব্যবহার করে সরাসরি কালেকশন থেকে কোনো উপাদান মুছে ফেলা নিরাপদ এবং কার্যকর।
ফর-ইচ লুপ বনাম ইটারেটর
Java তে ফর-ইচ লুপও কালেকশনের উপাদান অ্যাক্সেস করতে ব্যবহৃত হয়। তবে, ইটারেটরের মাধ্যমে উপাদান মুছে ফেলা যায়, যা ফর-ইচ লুপে সম্ভব নয়। ফলে ইটারেটর জটিল কাজের জন্য আরও কার্যকর।
উদাহরণ: ফর-ইচ লুপ ব্যবহার
List<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
names.add("Charlie");
for (String name : names) {
System.out.println(name);
}
ব্যাখ্যা: ফর-ইচ লুপ ব্যবহার করে সহজে কালেকশনের প্রতিটি উপাদান অ্যাক্সেস করা সম্ভব। তবে, ফর-ইচ লুপে remove অপারেশন সাপোর্ট করে না, যা ইটারেটর দিয়ে করা যায়।
সারসংক্ষেপ
- Iterator হলো কালেকশনের উপাদান একবারে একবার অ্যাক্সেস করতে ব্যবহৃত একটি ইন্টারফেস।
- এর
hasNext(),next(), এবংremove()মেথডের মাধ্যমে উপাদান ক্রমানুসারে অ্যাক্সেস করা যায় এবং প্রয়োজনে সরানো যায়। - ফর-ইচ লুপের তুলনায় ইটারেটর আরও নমনীয়, কারণ এটি সরাসরি উপাদান মুছে ফেলতে পারে।
Java Collections Framework এ ইটারেটর ব্যবহার করে প্রোগ্রামিং সহজ, কার্যকর এবং নির্ভরযোগ্য করা সম্ভব।
Read more