কি আপনি অ্যারে ব্যবহার করার আগে এর সাইজ ডিক্লেয়ার করতে করতে ক্লান্ত হয়েছেন? আপনি একলা নন, কারণ একটি অ্যারে ব্যবহার করার আগে সেটি কতগুলো মান সংরক্ষণ করবে সেটি ডিফাইন করা সবসময় সুবিধাজনক নয়।
সেটিই আমাদের সহায়ক বন্ধু, জাভা ArrayList, কাজে লাগে।
এই গাইডে আমরা ArrayList কী, কীভাবে কাজ করে, এবং এটি ট্রেডিশনাল অ্যারের সাথে কীভাবে তুলনা করা যায় তা আলোচনা করব। আমরা ArrayList ক্লাসের সাথে কার্যকরভাবে কাজ করার জন্য আপনাকে জানা দরকার সবচেয়ে গুরুত্বপূর্ণ মেথডগুলোও উদাহরণসহ দেখাব। শুরু করি!
ArrayList কী?
একটি ArrayList হলো একটি স্পেশাল টাইপের লিস্ট যা আপনাকে রিসাইজেবল অ্যারে তৈরি করতে দেয়। ArrayList ক্লাস List ইন্টারফেস ইমপ্লিমেন্ট করে, যা অর্ডারড ডেটা সংরক্ষণ করতে ব্যবহৃত হয়।
জাভা-তে একটি অ্যারে নিয়ে কাজ করার সময়, আপনাকে সেই অ্যারের সাইজ সেই অ্যারেতে মান সংরক্ষণ করার আগে ডিক্লেয়ার করতে হয়। প্রায়শই এমন হয় যে আপনি অ্যারে ডিক্লেয়ার করার আগে জানেন না আপনি কতগুলো মান সেটিতে সংরক্ষণ করতে চান, যা একটি সমস্যা সৃষ্টি করে।
ArrayList ক্লাস আপনাকে এমন একটি অ্যারে ডিফাইন করতে দেয় যেটিকে বলতে হবে না কতগুলো মান সেটি ধারণ করতে পারে। ArrayList, যাকে কখনো কখনো dynamic arrays বলা হয়, আপনি এলিমেন্ট যোগ বা মুছে ফেলার সময় তাদের ক্যাপাসিটি পরিবর্তন করতে পারে।
ArrayList কীভাবে তৈরি করবেন
স্পষ্ট জায়গা থেকে শুরু করি: একটি ArrayList ডিক্লেয়ার করা। একটা সেট আপ করা একটি অ্যারে ডিক্লেয়ার করার থেকে cukup ভিন্ন, কারণ এটি জাভা List ইন্টারফেস ব্যবহার করে।
একটি জাভা ফাইল খুলুন এবং আপনার মেইন ক্লাসে নিচের কোড পেস্ট করুন:
import java.util.ArrayList;
ArrayList<String> songs = new ArrayList<>();
আমরা songs নামে একটি অ্যারে লিস্ট তৈরি করেছি। String রেফার করে আমাদের অ্যারেতে কী টাইপের ডেটা সংরক্ষণ হবে এবং ArrayList রেফার করে আমরা কী টাইপের অবজেক্ট তৈরি করতে চাই।
আমাদের ArrayList আমাদের কোডে ইম্পোর্ট করতে হবে কারণ এটি জাভা util লাইব্রেরি থেকে আসে।
মনে রাখার কথা: আপনি প্রিমিটিভ ডেটা টাইপ ব্যবহার করে অ্যারে লিস্ট তৈরি করতে পারবেন না। যদি আপনি ইন্টিজার অ্যারে ডিক্লেয়ার করতে চান, উদাহরণস্বরূপ, আপনি প্রিমিটিভ int টাইপ ব্যবহার করতে পারবেন না; আপনাকে Integer ক্লাস ব্যবহার করতে হবে।
লক্ষ্য করুন আমাদের
ArrayList-এ এলিমেন্ট যোগ করা
add() মেথড আপনাকে আপনার লিস্টে একটি একক এলিমেন্ট যোগ করতে দেয়। ধরুন, আমরা আমাদের songs অ্যারে লিস্টে দুটি গান যোগ করতে চাই: Love Me Do এবং Help! (যে দুটোই The Beatles-এর)।
একটি নতুন জাভা ফাইল খুলুন এবং নিচের কোড লিখুন:
import java.util.ArrayList;
class Main {
public static void main(String[] args) {
ArrayList<String> songs = new ArrayList<>();
songs.add("Love Me Do");
songs.add("Help!");
System.out.println("Songs: " + songs);
}
}
আমাদের কোড ফেরত দেবে: Songs: [Love Me Do, Help!]
অ্যারের মতো, ArrayList-এ আইটেমগুলোর নিজস্ব ইনডেক্স নম্বর রয়েছে। এর কারণ হলো ArrayList-এ আইটেমগুলো অর্ডারড থাকে এবং নম্বরগুলো আমাদের প্রোগ্রামকে বলে আমাদের লিস্টে প্রতিটি আইটেম কোন ক্রমে থাকবে। যদি দরকার হয়, আপনি কোন ইনডেক্স পজিশনে একটি আইটেম যোগ করতে চান সেটি নির্দিষ্ট করতে পারেন:
songs.add(0, "Love Me Do");
এটি আমাদের songs লিস্টে ইনডেক্স পজিশন ০-এ "Love Me Do" এন্ট্রি যোগ করবে।
ArrayList ইনিশিয়ালাইজ করা
যখন আপনি একটি অ্যারে ডিক্লেয়ার করেন, আপনি সরাসরি সেটি ইনিশিয়ালাইজ করতে পারেন সেই মানগুলো নির্দিষ্ট করে যেগুলো আপনি সেই অ্যারেতে অ্যাসাইন করতে চান। ArrayLists এইভাবে কাজ করে না। আপনাকে Arrays ক্লাস থেকে একটি স্পেশাল মেথড asList() ব্যবহার করতে হবে একটি ArrayList ইনিশিয়ালাইজ করতে। asList() একটি অ্যারে একটি লিস্ট হিসেবে ফেরত দেয় যা ArrayList ক্লাস পড়তে পারে।
আপনি একটি ArrayList মান দিয়ে ইনিশিয়ালাইজ করতে চাইতে পারেন যদি আপনার কাছে ইতিমধ্যে কয়েকটি মান থাকে যা আপনি আপনার লিস্টে যোগ করতে চান।
আপনি একটি for লুপ ব্যবহার করে প্রতিটি আইটেম আলাদা আলাদা যোগ করতে পারেন। তবে, সেই পদ্ধতিটি সেট আপ করা বেশি জটিল এবং asList() ব্যবহার করে ডিফল্ট মান দিয়ে লিস্ট ইনিশিয়ালাইজ করার চেয়ে কম দক্ষ।
আমাদের কোডে ব্যবহৃত লাইব্রেরিগুলো ইম্পোর্ট করে শুরু করি:
import java.util.ArrayList;
import java.util.Arrays;
তারপর একটি ক্লাস লিখি যা আমাদের songs ArrayList দুটি মান দিয়ে ইনিশিয়ালাইজ করবে:
class Main {
public static void main(String[] args) {
ArrayList<String> songs = new ArrayList(Arrays.asList("Love Me Do", "Help!"));
System.out.println("Songs: " + songs);
}
}
এই কোডে, আমরা একটি ArrayList ঘোষণা করেছি যা স্ট্রিং মান সংরক্ষণ করতে পারে। আমরা asList() ব্যবহার করেছি আমাদের কোডকে নির্দেশ দিতে আমাদের অ্যারে লিস্টকে দুটি ডিফল্ট মান দিয়ে ইনিশিয়ালাইজ করতে, যেগুলো আগের উদাহরণের মতো একই Beatles গান।
ArrayList থেকে একটি আইটেম রিট্রিভ করা
ArrayList ক্লাস একটি হ্যান্ডি মেথড get() দিয়ে আসে যা আপনাকে একটি অ্যারে লিস্টের এলিমেন্টগুলো অ্যাক্সেস করতে দেয়। এই মেথড ব্যবহার করতে, আপনাকে সেই এলিমেন্টের ইনডেক্স পজিশন নির্দিষ্ট করতে হবে যেটি আপনি অ্যাক্সেস করতে চান।
এই উদাহরণটি বিবেচনা করুন:
import java.util.ArrayList;
class Main {
public static void main(String[] args) {
ArrayList<String> songs = new ArrayList<>();
songs.add("Love Me Do");
songs.add("Help!");
System.out.println("Second song: " + songs.get(1));
}
}
এই কোডে, আমরা একটি অ্যারে লিস্ট তৈরি করেছি এবং দুটি মান যোগ করেছি। আমরা songs.get(1) ব্যবহার করেছি আমাদের লিস্টে ইনডেক্স পজিশন ১-এ থাকা গানটি রিট্রিভ করতে। আমাদের কোড ফেরত দেবে:
Second song: Help!
ArrayList আপডেট করা
একটি অ্যারে লিস্ট আপডেট করা লিস্টে এলিমেন্ট যোগ করার মতোই সহজ। একটি বিল্ট-ইন মেথড set() রয়েছে যা আপনি একটি লিস্টে সংরক্ষিত মান পরিবর্তন করতে ব্যবহার করতে পারেন। নিচের কোডটি বিবেচনা করুন:
import java.util.ArrayList;
class Main {
public static void main(String[] args) {
ArrayList<String> songs = new ArrayList<>();
songs.add("Love Me Do");
songs.add("Help!");
System.out.println("Songs: " + songs);
songs.set(1, "Come Together");
System.out.println("Songs: " + songs);
}
}
আমাদের কোড ফেরত দেবে: Songs: [Love Me Do, Help!] Songs: [Love Me Do, Come Together]
আমাদের কোডে, আমরা দুটি মান—"Love Me Do" এবং "Help!"—আমাদের লিস্টে যোগ করেছি। আমরা ইনডেক্স পজিশন ১-এ থাকা আইটেমকে "Come Together" এ পরিবর্তন করেছি। এটি আমাদের লিস্টে "Help!" কে "Come Together" দিয়ে রিপ্লেস করেছে। প্রোগ্রামের শেষে আমাদের লিস্ট প্রিন্ট করলে আমরা দেখতে পাচ্ছি এটি রিভাইজড হয়েছে।
ArrayList থেকে একটি এলিমেন্ট মুছে ফেলা
এলিমেন্টগুলো সবসময় ArrayList-এ থাকতে হয় না। আপনি যেকোনো সময় remove() মেথড ব্যবহার করে একটি এলিমেন্ট মুছে ফেলতে পারেন। কত সহজ একটি মেথড নাম মনে রাখার জন্য!
এই উদাহরণটি বিবেচনা করুন:
import java.util.ArrayList;
class Main {
public static void main(String[] args) {
ArrayList<String> songs = new ArrayList<>();
songs.add("Love Me Do");
songs.add("Help!");
System.out.println("Songs: " + songs);
String removed = songs.remove(0);
System.out.println("Songs: " + songs);
System.out.println(removed);
}
}
এই উদাহরণে, আমরা আমাদের অ্যারে লিস্টে দুটি আইটেম যোগ করেছি। আমরা ইনডেক্স পজিশন ০-এ থাকা আইটেমটি মুছে ফেলেছি। আমাদের কোড ফেরত দেবে: Songs: [Love Me Do, Help!] Songs: [Help!] Love Me Do
আমরা আমাদের অ্যারে লিস্ট থেকে Love Me Do মুছে ফেলেছি। remove() মেথড মুছে ফেলা আইটেমের নাম ফেরত দেয়, যেটি আমরা removed ভেরিয়েবলে অ্যাসাইন করেছি। আমাদের প্রোগ্রামের শেষে আমরা এই ভেরিয়েবলের মান কনসোলে প্রিন্ট করেছি।
ArrayList এর মধ্য দিয়ে ইটারেট করা
যদি আপনি একটি ArrayList এর মধ্য দিয়ে লুপ করতে চান? আপনি এটি ফর লুপ বা ফর-ইচ লুপ ব্যবহার করে করতে পারেন, আপনার পছন্দের উপর নির্ভর করে।
ধরুন, আমরা আমাদের লিস্টে থাকা সব Beatles গান কনসোলে প্রিন্ট করতে চাই, প্রতিটি মান একটি নতুন লাইনে। আমরা নিচের কোড ব্যবহার করে এটি করতে পারি:
import java.util.ArrayList;
class Main {
public static void main(String[] args) {
ArrayList<String> songs = new ArrayList<>();
songs.add("Love Me Do");
songs.add("Help!");
for (int i = 0; i < songs.size(); i++) {
System.out.println(songs.get(i));
}
}
}
এই প্রোগ্রামে, আমরা একটি for লুপ ব্যবহার করেছি আমাদের অ্যারে লিস্টে প্রতিটি আইটেমের মধ্য দিয়ে ইটারেট করতে। অ্যারে লিস্টে প্রতিটি আইটেমের জন্য, আমরা সেটি কনসোলে তার নিজস্ব লাইনে প্রিন্ট করি। এই লুপ চলতে থাকবে যতক্ষণ না আমাদের লিস্টে সব আইটেম কনসোলে প্রিন্ট হয়।
লক্ষ্য করুন আমরা এই প্রোগ্রামে songs.size() নামক একটি মেথড ব্যবহার করেছি। size() মেথড আমাদের বলে আমাদের অ্যারে লিস্টে কতগুলো মান সংরক্ষিত।
আমাদের কোড ফেরত দেবে: Love Me Do Help!
একইভাবে, আপনি একটি for-each লুপ ব্যবহার করে একটি অ্যারে লিস্টের মধ্য দিয়ে ইটারেট করতে পারেন। এর কারণ হলো for-each লুপ যেকোনো ইটারেবল অবজেক্টের মধ্য দিয়ে ইটারেট করতে সাপোর্ট করে। নিচের উদাহরণটি বিবেচনা করুন:
import java.util.ArrayList;
class Main {
public static void main(String[] args) {
ArrayList<String> songs = new ArrayList<>();
songs.add("Love Me Do");
songs.add("Help!");
for (String song : songs) {
System.out.println(song);
}
}
}
এই প্রোগ্রাম কাঠামো এবং উদ্দেশ্য দুটোই খুব সিমিলার; এটি আমাদের songs অ্যারে লিস্টের সব মান কনসোলে প্রিন্ট করে। পার্থক্য হলো আমরা প্রতিটি মান এর মধ্য দিয়ে ইটারেট করতে for-each লুপ ব্যবহার করেছি।
আপনি for লুপের বদলে for-each লুপ ব্যবহার করতে বেছে নিতে পারেন কারণ for-each লুপ পড়া সহজ, কিন্তু দুটো পদ্ধতিই কার্যকরভাবে কাজ করে।
উপসংহার
জাভা ArrayList ক্লাস আপনাকে এমন অ্যারে ডিফাইন করতে দেয় যেগুলো একাধিক মান সংরক্ষণ করতে পারে না জানতে হয় না সেগুলো কতগুলো মান ধারণ করবে।
আমরা জাভা-তে ArrayList ব্যবহার করার সতহের কথা মাত্র বলেছি। আরও জানতে, আপনি নিচের টিউটোরিয়ালগুলো দেখতে পারেন:
- ArrayList to Array কনভারশন
- ArrayList কীভাবে ইনিশিয়ালাইজ করবেন
- ArrayList কীভাবে সর্ট করবেন
এখন আপনাকে আর চিন্তা করতে হবে না যে আপনি কি করবেন যদি আপনি না জানেন একটি অ্যারে কতগুলো মান ধারণ করতে হবে। আপনি ArrayList ব্যবহার করে এই সমস্যাটি সমাধান করতে পারবেন!