অ্যারে (Array) হল একটি প্রাথমিক এবং সাধারণ ডেটা স্ট্রাকচার যা একাধিক উপাদান (elements) সন্নিবেশিত রাখতে ব্যবহৃত হয়। Java তে অ্যারে একটি একক ডেটা টাইপের উপাদান সন্নিবেশিত করতে সক্ষম, যা একটি নির্দিষ্ট আকারের হয় এবং ঐ আকারের মধ্যে ডেটা সংরক্ষণ করা হয়। অ্যারের প্রধান সুবিধা হল এটি একই ধরনের উপাদান একসাথে সংরক্ষণ করতে সক্ষম এবং সেগুলির অ্যাক্সেস খুব দ্রুত হয়।
1. অ্যারে (Array) এর সংজ্ঞা ও বৈশিষ্ট্য
- ফিক্সড সাইজ: একবার অ্যারে তৈরি হলে তার আকার পরিবর্তন করা যায় না।
- একটি নির্দিষ্ট ডেটা টাইপ: সমস্ত উপাদান একই ধরনের হতে হবে (যেমন, int, String, float ইত্যাদি)।
- ইনডেক্সিং: অ্যারের প্রতিটি উপাদান একটি নির্দিষ্ট ইনডেক্স দ্বারা অ্যাক্সেস করা যায়। ইনডেক্সিং 0 থেকে শুরু হয়।
- স্ট্যাটিক ও ডাইনামিক: অ্যারে স্ট্যাটিক ডেটা স্ট্রাকচার হতে পারে, কারণ এর আকার নির্ধারিত থাকে প্রাথমিকভাবে। তবে ArrayList এর মতো ডাইনামিক অ্যারে সংস্করণও Java তে রয়েছে।
2. অ্যারে তৈরি ও ব্যবহারের উদাহরণ (Java)
একটি অ্যারে তৈরি ও ইনিশিয়ালাইজেশন:
public class ArrayExample {
public static void main(String[] args) {
// 1. এক্সপ্রেস অ্যারে ডিক্লেয়ারেশন এবং ইনিশিয়ালাইজেশন
int[] arr = {1, 2, 3, 4, 5}; // স্ট্যাটিক ইনিশিয়ালাইজেশন
// 2. অ্যারের আকার নির্ধারণ করা
int[] arr2 = new int[5]; // স্ট্যাটিক সাইজ
// অ্যারের মান প্রিন্ট করা
System.out.println("Array using static initialization:");
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
// অ্যারের মান অ্যাক্সেস করা
arr2[0] = 10;
arr2[1] = 20;
arr2[2] = 30;
arr2[3] = 40;
arr2[4] = 50;
System.out.println("Array using dynamic initialization:");
for (int i = 0; i < arr2.length; i++) {
System.out.println(arr2[i]);
}
}
}
ব্যাখ্যা:
- প্রথমে arr নামে একটি অ্যারে তৈরি করা হয়েছে যেটি ইনিশিয়ালাইজ করা হয়েছে সরাসরি কিছু মান দিয়ে।
- তারপর arr2 নামে একটি অ্যারে তৈরি করা হয়েছে যার আকার ৫, এবং পরে প্রতিটি উপাদান আলাদাভাবে সেট করা হয়েছে।
- অ্যারে অ্যাক্সেস করার জন্য for loop ব্যবহার করা হয়েছে।
3. অ্যারে ব্যবহার করার সুবিধা এবং সীমাবদ্ধতা
সুবিধা:
- ব্রিজ অ্যাক্সেস: অ্যারের প্রতিটি উপাদান খুব দ্রুত অ্যাক্সেস করা যায়, কারণ ইনডেক্সিং হয়।
- সোজাসুজি: একসাথে একই ধরনের ডেটা রাখার জন্য এটি খুবই সহজ এবং উপকারী।
সীমাবদ্ধতা:
- ফিক্সড সাইজ: অ্যারের আকার একবার নির্ধারণ করলে পরে পরিবর্তন করা যায় না।
- মেমরি: বড় সাইজের অ্যারে তৈরি হলে মেমরি খরচ বাড়ে এবং প্রোগ্রামের কর্মক্ষমতা কমতে পারে।
- ডাটা টাইপ: অ্যারে একটি নির্দিষ্ট ডেটা টাইপের উপাদান ধারণ করতে পারে, তাই বিভিন্ন ধরনের ডেটা রাখার জন্য অন্যান্য ডেটা স্ট্রাকচার ব্যবহার করতে হবে।
4. অ্যারে সংক্রান্ত কিছু গুরুত্বপূর্ণ অপারেশন (Java)
১. অ্যারে ইনসার্ট (Insert) অপারেশন
যেহেতু অ্যারে একটি স্ট্যাটিক ডেটা স্ট্রাকচার, একবার সেট আকারে তৈরি হলে এর আকার পরিবর্তন করা যায় না। তবে, একটি নির্দিষ্ট ইনডেক্সে নতুন মান ইনসার্ট করা সম্ভব।
public class ArrayInsertExample {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 5, 6}; // অ্যারে তৈরি
int pos = 3; // ইনসার্ট করার পজিশন
int newValue = 4; // নতুন মান
// নতুন অ্যারে তৈরি করে মান ইনসার্ট করা
int[] newArr = new int[arr.length + 1];
for (int i = 0; i < pos; i++) {
newArr[i] = arr[i];
}
newArr[pos] = newValue; // নতুন মান ইনসার্ট
for (int i = pos + 1; i < newArr.length; i++) {
newArr[i] = arr[i - 1];
}
// নতুন অ্যারে প্রিন্ট করা
System.out.println("Array after insertion:");
for (int i = 0; i < newArr.length; i++) {
System.out.println(newArr[i]);
}
}
}
ব্যাখ্যা:
- আমরা একটি নতুন অ্যারে তৈরি করেছি যা আগের অ্যারের আকার থেকে ১ বেশি।
- ইনডেক্স ৩-এ নতুন মান ইনসার্ট করেছি এবং তার পরে অ্যারের বাকি উপাদানগুলির শিফটিং করেছি।
২. অ্যারে ডিলিট (Delete) অপারেশন
অ্যারে থেকে কোনো উপাদান মুছে ফেলা হলে, বাকী উপাদানগুলির স্থান পরিবর্তন করতে হবে। নিচে একটি উদাহরণ দেওয়া হলো।
public class ArrayDeleteExample {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5};
int deletePos = 2; // মুছতে হবে এমন ইনডেক্স
// নতুন অ্যারে তৈরি করে উপাদান মুছে ফেলা
int[] newArr = new int[arr.length - 1];
for (int i = 0, j = 0; i < arr.length; i++) {
if (i != deletePos) {
newArr[j++] = arr[i];
}
}
// নতুন অ্যারে প্রিন্ট করা
System.out.println("Array after deletion:");
for (int i = 0; i < newArr.length; i++) {
System.out.println(newArr[i]);
}
}
}
ব্যাখ্যা:
- নির্দিষ্ট ইনডেক্স থেকে উপাদান মুছে ফেলার পর, বাকী উপাদানগুলো একে একে শিফট করা হয়েছে নতুন অ্যারেতে।
5. অ্যারে সম্পর্কিত অ্যালগরিদম
১. অ্যারে সোর্টিং (Sorting an Array)
Sorting হলো একটি অ্যালগরিদম যা ডেটার তালিকা সাজানোর জন্য ব্যবহৃত হয়। জাভাতে Arrays.sort() পদ্ধতি সহজেই অ্যারে সোর্ট করতে ব্যবহৃত হয়।
import java.util.Arrays;
public class ArraySortingExample {
public static void main(String[] args) {
int[] arr = {5, 2, 9, 1, 5, 6};
Arrays.sort(arr);
System.out.println("Sorted array: " + Arrays.toString(arr));
}
}
ব্যাখ্যা:
- Arrays.sort() পদ্ধতি ব্যবহার করে অ্যারে সজ্জিত করা হয়েছে।
২. বাইনারি সার্চ (Binary Search)
Binary Search হল একটি দক্ষ অ্যালগরিদম যা সজ্জিত অ্যারের মধ্যে একটি উপাদান খুঁজে বের করার জন্য ব্যবহৃত হয়।
public class BinarySearchExample {
public static int binarySearch(int[] arr, int target) {
int low = 0, high = arr.length - 1;
while (low <= high) {
int mid = low + (high - low) / 2;
// যদি টার্গেট পাওয়া যায়
if (arr[mid] == target) {
return mid;
}
// যদি টার্গেট ছোট হয়
else if (arr[mid] > target) {
high = mid - 1;
}
// যদি টার্গেট বড় হয়
else {
low = mid + 1;
}
}
return -1; // যদি উপাদান না পাওয়া যায়
}
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5, 6, 7};
int target = 4;
int result = binarySearch(arr, target);
System.out.println("Element found at index: " + result);
}
}
ব্যাখ্যা:
- অ্যারে সজ্জিত (sorted) হলে, binary search খুব দ্রুত উপাদান খুঁজে বের করতে পারে।
সারাংশ
অ্যারে (Array) হল ডেটা স্ট্রাকচারের একটি প্রাথমিক এবং সাধারণ উপাদান যা Java-এ ডেটা সংরক্ষণের জন্য ব্যবহৃত হয়। এটি একটি নির্দিষ্ট সাইজ এবং টাইপের ডেটা সংরক্ষণ করে এবং ইনডেক্সিং এর মাধ্যমে দ্রুত অ্যাক্সেস করা সম্ভব। অ্যারে সম্পর্কিত বিভিন্ন অপারেশন যেমন insert, delete, sorting, এবং binary search সহজেই Java দিয়ে করা যায়। তবে, অ্যারের সীমাবদ্ধতা হলো এর আকার একটি নির্দিষ্ট সময়ের জন্য স্থির থাকে, এবং অ্যারের মাপ পরিবর্তন করা সম্ভব নয়।
Array (এরে) একটি ডেটা স্ট্রাকচার যা একধরণের নির্দিষ্ট আকারের সমান ধরনের উপাদান সংরক্ষণ করে। এটি একটি লিনিয়ার ডেটা স্ট্রাকচার, যার মধ্যে একাধিক ভ্যালু একই টাইপের হতে পারে এবং ঐসব ভ্যালু একটি নির্দিষ্ট অর্ডারে সংরক্ষিত থাকে। অ্যারে খুবই গুরুত্বপূর্ণ ডেটা স্ট্রাকচার, যা বিভিন্ন ধরনের তথ্য সংরক্ষণে ব্যবহৃত হয়, যেমন ইন্টিজার, স্ট্রিং, বুলিয়ান ইত্যাদি।
Array কি?
এরে হল একটি নির্দিষ্ট আকারের ডেটা স্ট্রাকচার যেখানে একই ধরনের ডেটা একত্রে একটি কনটেইনারে সংরক্ষিত হয়। প্রত্যেকটি উপাদানকে একটি নির্দিষ্ট ইনডেক্স (অথবা পজিশন) দিয়ে অ্যাক্সেস করা যায়। অ্যারে সাধারণত নির্দিষ্ট আকারে সংজ্ঞায়িত করা হয় এবং এটি ফিক্সড সাইজের হয়, অর্থাৎ একবার সাইজ নির্ধারণ করা হলে পরে তা পরিবর্তন করা সম্ভব নয়।
এতে প্রতিটি উপাদানের জন্য মেমরি লোকেশন একটি নির্দিষ্ট পদক্ষেপে বাড়ানো হয়, যা দ্রুত অ্যাক্সেসের সুবিধা দেয়।
উদাহরণ:
int[] numbers = {1, 2, 3, 4, 5}; // একটি অ্যারে যা ৫টি পূর্ণসংখ্যা ধারণ করে
এখানে, numbers অ্যারেটি ৫টি পূর্ণসংখ্যা ধারণ করছে এবং প্রতিটি উপাদান একটি নির্দিষ্ট ইনডেক্সের মাধ্যমে অ্যাক্সেস করা সম্ভব।
Array এর প্রকারভেদ
এরে সাধারণত দুটি প্রধান প্রকারে বিভক্ত হয়: One-Dimensional Array (একমাত্রিক অ্যারে) এবং Multi-Dimensional Array (বহুমাত্রিক অ্যারে)।
1. One-Dimensional Array (একমাত্রিক অ্যারে)
একমাত্রিক অ্যারে এমন একটি অ্যারে, যার মধ্যে একটিমাত্র রো (row) বা কলাম (column) থাকে। এটি সবচেয়ে সাধারণ ধরনের অ্যারে, যেখানে সকল উপাদান একটি লিনিয়ার ফর্মে সংরক্ষিত থাকে। এই ধরনের অ্যারে সাধারণত সিরিয়াল ডেটা সংরক্ষণে ব্যবহৃত হয়।
উদাহরণ:
int[] numbers = {1, 2, 3, 4, 5}; // একটি একমাত্রিক অ্যারে
System.out.println(numbers[2]); // আউটপুট হবে 3, কারণ এটি ৩য় ইনডেক্সে রয়েছে
এখানে, numbers একটি একমাত্রিক অ্যারে যা ৫টি পূর্ণসংখ্যা ধারণ করছে। প্রতিটি উপাদান ইনডেক্সের মাধ্যমে অ্যাক্সেস করা হয়।
2. Multi-Dimensional Array (বহুমাত্রিক অ্যারে)
বহুমাত্রিক অ্যারে এমন একটি অ্যারে, যা একাধিক একমাত্রিক অ্যারে ধারণ করে। এটি একাধিক সারি এবং কলাম থাকতে পারে, এবং ডেটার একটি টেবিলের মত অর্গানাইজেশন তৈরির জন্য ব্যবহৃত হয়। বহুমাত্রিক অ্যারে সাধারণত ২D (দ্বিমাত্রিক) বা ৩D (ত্রিমাত্রিক) অ্যারে হয়ে থাকে।
উদাহরণ (2D Array):
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
}; // একটি ২D অ্যারে (ম্যাট্রিক্স)
System.out.println(matrix[1][2]); // আউটপুট হবে 6, কারণ এটি ২য় সারির ৩য় কলামে রয়েছে
এখানে, matrix একটি দ্বিমাত্রিক অ্যারে, যেখানে ৩টি সারি এবং ৩টি কলাম রয়েছে।
উদাহরণ (3D Array):
int[][][] cube = {
{
{1, 2}, {3, 4}
},
{
{5, 6}, {7, 8}
}
}; // একটি ৩D অ্যারে
System.out.println(cube[1][0][1]); // আউটপুট হবে 6, কারণ এটি দ্বিতীয় ব্লকের প্রথম সারির দ্বিতীয় কলামে রয়েছে
এখানে, cube একটি ত্রিমাত্রিক অ্যারে, যা একটি ৩D গ্রিডের মত কাজ করে।
সারাংশ
অ্যারে একটি গুরুত্বপূর্ণ ডেটা স্ট্রাকচার যা একই ধরনের ডেটা একত্রে সংরক্ষণ করতে ব্যবহৃত হয়। এর দুটি প্রধান প্রকার রয়েছে: One-Dimensional Array (একমাত্রিক অ্যারে) এবং Multi-Dimensional Array (বহুমাত্রিক অ্যারে)। একমাত্রিক অ্যারে সাধারণত একটি লিনিয়ার ফর্মে ডেটা সংরক্ষণ করে, whereas বহুমাত্রিক অ্যারে একাধিক সারি ও কলামের মাধ্যমে ডেটা সংরক্ষণ করতে ব্যবহৃত হয়। অ্যারে খুবই কার্যকরী ডেটা স্ট্রাকচার, যা দ্রুত অ্যাক্সেস এবং কার্যকরী অপারেশন নিশ্চিত করে।
Array (অ্যারেতে) হলো ডেটা স্ট্রাকচারের একটি মৌলিক উপাদান যা একই ধরনের একাধিক উপাদান সংরক্ষণ করতে ব্যবহৃত হয়। অ্যারে ব্যবহার করে আপনি একাধিক মান সংরক্ষণ করতে পারেন এবং সেগুলোর মধ্যে সহজে অ্যাক্সেস করতে পারেন। এটি একটি নির্দিষ্ট সাইজের এবং ইনডেক্স (অথবা পজিশন) অনুযায়ী উপাদান গুলিকে সংরক্ষণ করে। অ্যারে বিশেষ করে পরিমাণগত ডেটা এবং সিকোয়েন্সিয়াল অ্যাক্সেসের জন্য ব্যবহৃত হয়।
জাভাতে, অ্যারে একটি স্থির আকারের ডেটা স্ট্রাকচার, যার মানে হলো, একবার অ্যারে তৈরি হলে তার সাইজ পরিবর্তন করা সম্ভব নয়। তবে আপনি অ্যারের উপাদানগুলিতে অ্যাক্সেস, পরিবর্তন, এবং অপারেশন করতে পারেন।
Java তে Array তৈরি এবং ব্যবহার
১. Array তৈরি করা
জাভাতে অ্যারে তৈরি করার জন্য দুটি প্রধান উপায় রয়েছে:
- অ্যারে ডিক্লেয়ার এবং ইনিশিয়ালাইজ করা
newকিওয়ার্ড ব্যবহার করে অ্যারে তৈরি করা
উদাহরণ ১: অ্যারে ডিক্লেয়ার এবং ইনিশিয়ালাইজ করা
public class ArrayExample {
public static void main(String[] args) {
// একটি ইন্টিজার অ্যারে ডিক্লেয়ার এবং ইনিশিয়ালাইজ করা
int[] numbers = {10, 20, 30, 40, 50};
// অ্যারের উপাদান গুলোর উপর লুপ চালানো
for (int i = 0; i < numbers.length; i++) {
System.out.println("Element at index " + i + ": " + numbers[i]);
}
}
}
এখানে:
int[] numbersদ্বারা একটি ইন্টিজার টাইপের অ্যারে ডিক্লেয়ার করা হয়েছে।{10, 20, 30, 40, 50}দিয়ে অ্যারেটি ইনিশিয়ালাইজ করা হয়েছে, অর্থাৎ এর মধ্যে ৫টি মান রয়েছে।
উদাহরণ ২: new কিওয়ার্ড ব্যবহার করে অ্যারে তৈরি করা
public class ArrayExample {
public static void main(String[] args) {
// একটি অ্যারে তৈরি করা যেটির সাইজ 5
int[] numbers = new int[5];
// অ্যারের উপাদান ইনিশিয়ালাইজ করা
numbers[0] = 10;
numbers[1] = 20;
numbers[2] = 30;
numbers[3] = 40;
numbers[4] = 50;
// অ্যারের উপাদান গুলোর উপর লুপ চালানো
for (int i = 0; i < numbers.length; i++) {
System.out.println("Element at index " + i + ": " + numbers[i]);
}
}
}
এখানে:
new int[5]দিয়ে ৫টি উপাদান ধারণ করতে সক্ষম একটি অ্যারে তৈরি করা হয়েছে।- এর পর, প্রতিটি উপাদান
numbers[0] = 10এইভাবে ইনিশিয়ালাইজ করা হয়েছে।
২. Array এর উপাদান অ্যাক্সেস করা
অ্যারেতে কোন উপাদানে অ্যাক্সেস করতে হলে, আপনি ইনডেক্স ব্যবহার করবেন। যেহেতু অ্যারে ইনডেক্স 0 থেকে শুরু হয়, তাই প্রথম উপাদানটি 0 ইনডেক্সে থাকে।
উদাহরণ: অ্যারের উপাদান অ্যাক্সেস করা
public class ArrayExample {
public static void main(String[] args) {
// একটি ইন্টিজার অ্যারে ডিক্লেয়ার এবং ইনিশিয়ালাইজ করা
int[] numbers = {10, 20, 30, 40, 50};
// প্রথম উপাদান অ্যাক্সেস করা
System.out.println("First element: " + numbers[0]);
// তৃতীয় উপাদান অ্যাক্সেস করা
System.out.println("Third element: " + numbers[2]);
}
}
এখানে, numbers[0] দিয়ে প্রথম উপাদান এবং numbers[2] দিয়ে তৃতীয় উপাদান অ্যাক্সেস করা হয়েছে।
৩. Array এর সাইজ পাওয়া
অ্যারেগুলির সাইজ পাওয়ার জন্য length ফিল্ড ব্যবহার করা হয়, যা অ্যারের মোট উপাদানের সংখ্যা নির্দেশ করে।
উদাহরণ: Array এর সাইজ বের করা
public class ArrayExample {
public static void main(String[] args) {
// একটি ইন্টিজার অ্যারে ডিক্লেয়ার এবং ইনিশিয়ালাইজ করা
int[] numbers = {10, 20, 30, 40, 50};
// অ্যারের সাইজ বের করা
System.out.println("Array size: " + numbers.length);
}
}
এখানে, numbers.length ব্যবহার করে অ্যারের সাইজ বের করা হয়েছে। এখানে সাইজ হবে 5, কারণ অ্যারেটিতে ৫টি উপাদান রয়েছে।
৪. Array Traversing এবং Modification
অ্যারেতে বিভিন্ন ধরনের অপারেশন করতে যেমন উপাদান খুঁজে বের করা, পরিবর্তন করা, বা অ্যারের সকল উপাদান নিয়ে কোনো নির্দিষ্ট কাজ করা খুব সহজ। যেমন একটি অ্যারে ট্র্যাভার্স করার জন্য লুপ ব্যবহার করা হয়।
উদাহরণ: Array Traversing এবং Modification
public class ArrayExample {
public static void main(String[] args) {
// একটি ইন্টিজার অ্যারে ডিক্লেয়ার এবং ইনিশিয়ালাইজ করা
int[] numbers = {10, 20, 30, 40, 50};
// অ্যারের সকল উপাদান পরিবর্তন করা
for (int i = 0; i < numbers.length; i++) {
numbers[i] = numbers[i] * 2; // প্রতিটি উপাদানকে ২ দিয়ে গুণ করা
}
// অ্যারের পরিবর্তিত উপাদান গুলো প্রিন্ট করা
for (int i = 0; i < numbers.length; i++) {
System.out.println("Updated element at index " + i + ": " + numbers[i]);
}
}
}
এখানে:
- প্রথমে, অ্যারের সকল উপাদানকে
2দিয়ে গুণ করা হয়েছে। - এরপর, পরিবর্তিত অ্যারের উপাদানগুলো প্রিন্ট করা হয়েছে।
সারাংশ
Array (অ্যারেতে) জাভাতে একটি শক্তিশালী এবং সহজ ডেটা স্ট্রাকচার যা একই ধরনের ডেটাকে একটি গ্রুপে সংরক্ষণ করতে ব্যবহৃত হয়। অ্যারে তৈরি, অ্যাক্সেস, পরিবর্তন, এবং ট্র্যাভার্স করা সহজ, এবং এটি যে কোনো সমস্যা সমাধানে কার্যকর হতে পারে যেখানে সিকোয়েন্সিয়াল ডেটার প্রয়োজন হয়।
- Array তৈরি:
int[] numbers = {10, 20, 30};অথবাint[] numbers = new int[5];দিয়ে অ্যারে তৈরি করা যায়। - Array অ্যাক্সেস: অ্যারের উপাদানগুলি ইনডেক্সের মাধ্যমে অ্যাক্সেস করা হয়, যেমন
numbers[0]। - Array সাইজ: অ্যারের সাইজ পাওয়া যায়
lengthফিল্ড দিয়ে, যেমনnumbers.length।
অ্যারেগুলির সাহায্যে জাভাতে দ্রুত এবং কার্যকরভাবে ডেটা পরিচালনা করা যায়।
ডাটা স্ট্রাকচার এবং অ্যালগরিদম এর মধ্যে, Multidimensional Array এবং Dynamic Array দুটি গুরুত্বপূর্ণ ধারণা যা জাভাতে ডেটা সংরক্ষণ এবং পরিচালনা করার জন্য ব্যবহৃত হয়। এই দুটি কনসেপ্টের মধ্যে পার্থক্য এবং কিভাবে জাভাতে এগুলি ব্যবহৃত হয়, তা জানবো।
১. Multidimensional Array
Multidimensional Array হল এমন একটি অ্যারে যা একাধিক ডাইমেনশন বা মাত্রা নিয়ে গঠিত। এটি সাধারণত Row x Column এর আকারে হয় এবং বিভিন্ন ধরনের matrix বা grid ডেটা সংরক্ষণ করতে ব্যবহৃত হয়। জাভাতে, একটি মাল্টিডাইমেনশনাল অ্যারে একটি অ্যারের মধ্যে আরেকটি অ্যারে থাকতে পারে।
উদাহরণ: 2D Array (Two-Dimensional Array)
একটি সাধারণ 2D অ্যারে যেখানে রো (row) এবং কলাম (column) থাকে, সেগুলোকে ধারণ করা হয়।
public class MultiDimensionalArrayExample {
public static void main(String[] args) {
// 2D Array Declaration and Initialization
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// Accessing elements in a 2D Array
System.out.println("Element at [0][0]: " + matrix[0][0]);
System.out.println("Element at [1][1]: " + matrix[1][1]);
System.out.println("Element at [2][2]: " + matrix[2][2]);
// Iterating over 2D Array
System.out.println("Iterating through the 2D array:");
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
System.out.print(matrix[i][j] + " ");
}
System.out.println();
}
}
}
ব্যাখ্যা:
- 2D Array Declaration:
int[][] matrixদ্বারা 2D অ্যারে ডিক্লেয়ার করা হয়েছে। এটি একটি অ্যারে যেটি আবার অন্য অ্যারে ধারণ করে। - Accessing elements: অ্যারের নির্দিষ্ট অবস্থান অ্যাক্সেস করা হয় যেমন
matrix[0][0]। - Iterating: একটি লুপ ব্যবহার করে অ্যারের সমস্ত উপাদান ভ্রমণ করা হয়।
আউটপুট:
Element at [0][0]: 1
Element at [1][1]: 5
Element at [2][2]: 9
Iterating through the 2D array:
1 2 3
4 5 6
7 8 9
অন্যান্য Multidimensional Array:
3D Array: একটি 3D অ্যারে হল একাধিক 2D অ্যারের集合।
int[][][] cube = new int[3][3][3]; // 3x3x3 3D ArrayJagged Arrays: এটি একটি বিশেষ ধরনের মাল্টিডাইমেনশনাল অ্যারে যেখানে প্রতিটি রো (row) আলাদা সাইজের হতে পারে।
int[][] jaggedArray = { {1, 2, 3}, {4, 5}, {6, 7, 8, 9} };
২. Dynamic Array
Dynamic Array এমন একটি অ্যারে যা আকারে পরিবর্তনশীল। এটি সাধারণত একটি Resizable Array বা ArrayList হিসাবে পরিচিত। জাভাতে ArrayList ডাইনামিক অ্যারে হিসেবে ব্যবহৃত হয়, যা স্বয়ংক্রিয়ভাবে তার আকার বাড়ায় বা কমায় যখন নতুন উপাদান যুক্ত বা মুছে ফেলা হয়।
উদাহরণ: ArrayList (Dynamic Array)
import java.util.ArrayList;
public class DynamicArrayExample {
public static void main(String[] args) {
// ArrayList Declaration and Initialization
ArrayList<Integer> numbers = new ArrayList<>();
// Adding elements to ArrayList
numbers.add(10);
numbers.add(20);
numbers.add(30);
numbers.add(40);
// Accessing elements from ArrayList
System.out.println("Element at index 0: " + numbers.get(0));
System.out.println("Element at index 2: " + numbers.get(2));
// Iterating over ArrayList
System.out.println("Iterating through ArrayList:");
for (int number : numbers) {
System.out.print(number + " ");
}
// Removing an element
numbers.remove(1); // Removes element at index 1
// Checking size
System.out.println("\nSize of ArrayList: " + numbers.size());
// Iterating after removal
System.out.println("Iterating after removal:");
for (int number : numbers) {
System.out.print(number + " ");
}
}
}
ব্যাখ্যা:
- ArrayList Declaration:
ArrayList<Integer> numbers = new ArrayList<>();দ্বারা ডাইনামিক অ্যারে ডিক্লেয়ার করা হয়েছে। - Adding elements:
add()মেথড দিয়ে উপাদান যুক্ত করা হয়েছে। - Accessing elements:
get()মেথড দিয়ে উপাদান অ্যাক্সেস করা হয়েছে। - Removing elements:
remove()মেথড দিয়ে উপাদান মুছে ফেলা হয়েছে। - Size:
size()মেথড ব্যবহার করে ArrayList এর সাইজ পাওয়া যায়।
আউটপুট:
Element at index 0: 10
Element at index 2: 30
Iterating through ArrayList:
10 20 30 40
Size of ArrayList: 4
Iterating after removal:
10 30 40
অন্যান্য Dynamic Array এর বৈশিষ্ট্য:
- Automatic Resizing:
ArrayListযখন পূর্ণ হয়ে যায়, তখন এটি স্বয়ংক্রিয়ভাবে তার আকার দ্বিগুণ করে। - Memory Efficiency:
ArrayListএর সাইজ বৃদ্ধি করা বা কমানো খুব সহজ এবং মেমরি ব্যবস্থাপনার জন্য আরও উপযুক্ত। - Performance Considerations:
ArrayListএর কিছু সীমাবদ্ধতা যেমন, ইনডেক্সিংয়ে O(1) সময় হলেও, মুছে ফেলা এবং ইনসার্ট অপারেশনগুলি O(n) সময় নিতে পারে যদি উপাদান গুলোকে সরাতে হয়।
৩. Multidimensional Array এবং Dynamic Array এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Multidimensional Array | Dynamic Array |
|---|---|---|
| আকৃতি | স্থির, নির্দিষ্ট আকারের (এটি সংশোধন করা কঠিন) | আকারে পরিবর্তনশীল (স্বয়ংক্রিয়ভাবে আকার পরিবর্তন হয়) |
| ইনডেক্সিং | একাধিক মাত্রা, সাধারণত রো এবং কলামে ইনডেক্স করা হয় | একমাত্র ইনডেক্সিং, শুধু একটি মাত্রা |
| স্টোরেজ | আগের থেকেই প্রিসাইজড সাইজে স্টোরেজ | প্রয়োজন অনুযায়ী মেমরি বৃদ্ধি করে |
| অপারেশন | ঐতিহ্যবাহী অ্যারে অপারেশন যেমন অ্যাক্সেস, অ্যাসাইনমেন্ট সহজ | ArrayList এর মতো অপারেশন যেমন উপাদান যুক্ত করা, মুছে ফেলা সহজ |
| প্রয়োগ ক্ষেত্র | ম্যাট্রিক্স, টেবিল, বা গ্রিড ডেটা সঞ্চয় | পরিবর্তনশীল ডেটার জন্য, যেমন লিস্ট, স্ট্যাক, কিউ |
৪. কোথায় ব্যবহার করবেন?
- Multidimensional Array: যখন আপনার একটি ফিক্সড আকারের গ্রিড বা ম্যাট্রিক্স দরকার হয় (যেমন, ইমেজ প্রসেসিং, গেমস, মেশিন লার্নিং মডেলিং)
- Dynamic Array (ArrayList): যখন ডেটা পরিবর্তনশীল হয় এবং ডেটার সাইজ বার বার পরিবর্তিত হয় (যেমন, লিস্টের মধ্যে উপাদান যোগ বা মুছে ফেলা)
সারাংশ
Multidimensional Array এবং Dynamic Array জাভাতে দুটি গুরুত্বপূর্ণ ডেটা স্ট্রাকচার যা ডেটা সংরক্ষণের জন্য ব্যবহৃত হয়। Multidimensional Array একাধিক মাত্রায় ডেটা সংরক্ষণের জন্য ব্যবহৃত হয়, যেমন 2D বা 3D অ্যারে, যেখানে ডেটা একটি নির্দিষ্ট আকারে থাকে। অপরদিকে, Dynamic Array (ArrayList) আকারে পরিবর্তনশীল, এবং এটি জাভার একটি প্রিলোডেড ক্লাস যা দ্রুত ডেটা ইনসার্ট, ডিলিট এবং রিটার্ন করার জন্য উপযুক্ত।
Arrays হল ডাটা স্ট্রাকচারের একটি মৌলিক এবং সাধারণ প্রকার, যেখানে একধরনের ডেটা ধারাবাহিকভাবে সংরক্ষিত থাকে। Java তে Arrays ব্যবহারের মাধ্যমে ডেটা সংরক্ষণ, এক্সেস, এবং পরিবর্তন করা সহজ। Arrays এর সাথে কিছু সাধারণ অপারেশন যেমন Insertion, Deletion, এবং Traversal করা হয়।
এই টিউটোরিয়ালে, আমরা Java ব্যবহার করে Arrays এর উপর তিনটি সাধারণ অপারেশন - Insertion, Deletion, এবং Traversal আলোচনা করব।
1. Array Traversal
Traversal একটি Array এর প্রতিটি উপাদান একে একে এক্সেস করার প্রক্রিয়া। এটি সাধারণত ডেটা দেখতে বা প্রসেস করতে ব্যবহৃত হয়।
উদাহরণ: Array Traversal
public class ArrayTraversalExample {
public static void main(String[] args) {
// Array initialization
int[] arr = {10, 20, 30, 40, 50};
// Traversing the array using a for loop
System.out.println("Array Elements:");
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
ব্যাখ্যা:
arr.length: এটি Array এর দৈর্ঘ্য বা এলিমেন্টের সংখ্যা রিটার্ন করে।- For loop: এটি Array এর প্রতিটি এলিমেন্ট একে একে এক্সেস করে এবং আউটপুটে দেখায়।
আউটপুট:
Array Elements:
10
20
30
40
50
2. Insertion in Array
Insertion হল একটি Array এর মধ্যে নতুন উপাদান যোগ করার প্রক্রিয়া। এটি নির্দিষ্ট ইনডেক্সে নতুন উপাদান যোগ করতে হয়।
উদাহরণ: Insertion in Array
public class ArrayInsertionExample {
public static void main(String[] args) {
// Array initialization
int[] arr = {10, 20, 30, 40, 50};
// Inserting a new element at index 2
int insertElement = 25;
int index = 2;
// Creating a new array with one extra space
int[] newArr = new int[arr.length + 1];
// Copying elements before the insertion index
for (int i = 0; i < index; i++) {
newArr[i] = arr[i];
}
// Inserting the new element
newArr[index] = insertElement;
// Copying elements after the insertion index
for (int i = index + 1; i < newArr.length; i++) {
newArr[i] = arr[i - 1];
}
// Display the new array
System.out.println("Array after insertion:");
for (int i = 0; i < newArr.length; i++) {
System.out.print(newArr[i] + " ");
}
}
}
ব্যাখ্যা:
- New Array Creation: ইনসার্ট করার জন্য একটি নতুন Array তৈরি করা হয়, যেখানে পুরনো Array এর চেয়ে একটি বাড়তি স্থান রাখা হয়।
- Element Copying: পুরনো Array থেকে উপাদানগুলিকে নতুন Array তে কপি করা হয়, এবং ইনডেক্সের নির্দিষ্ট স্থানে নতুন উপাদান যুক্ত করা হয়।
আউটপুট:
Array after insertion:
10 20 25 30 40 50
3. Deletion from Array
Deletion হল একটি Array থেকে একটি নির্দিষ্ট উপাদান মুছে ফেলার প্রক্রিয়া। এটি সাধারণত একটি নির্দিষ্ট ইনডেক্স থেকে উপাদান মুছে ফেলতে ব্যবহৃত হয়।
উদাহরণ: Deletion from Array
public class ArrayDeletionExample {
public static void main(String[] args) {
// Array initialization
int[] arr = {10, 20, 30, 40, 50};
// Deleting the element at index 2 (i.e., 30)
int index = 2;
// Creating a new array with one less element
int[] newArr = new int[arr.length - 1];
// Copying elements before the deletion index
for (int i = 0; i < index; i++) {
newArr[i] = arr[i];
}
// Copying elements after the deletion index
for (int i = index; i < newArr.length; i++) {
newArr[i] = arr[i + 1];
}
// Display the new array after deletion
System.out.println("Array after deletion:");
for (int i = 0; i < newArr.length; i++) {
System.out.print(newArr[i] + " ");
}
}
}
ব্যাখ্যা:
- New Array Creation: ডিলিট করার জন্য একটি নতুন Array তৈরি করা হয়, যেখানে পুরনো Array এর চেয়ে একটি কম স্থানে নতুন Array থাকবে।
- Element Copying: পুরনো Array থেকে ডিলিট করার আগের এবং পরবর্তী উপাদানগুলিকে নতুন Array তে কপি করা হয়, তবে মুছে ফেলা উপাদানটি বাদ দেওয়া হয়।
আউটপুট:
Array after deletion:
10 20 40 50
4. Optimized Deletion (Shifting Elements)
Deletion করার জন্য, অন্য একটি অপ্টিমাইজড পদ্ধতি হল Shifting Elements। এতে আমরা একটি নির্দিষ্ট উপাদান মুছে ফেলার পর পরবর্তী সব উপাদান এক পজিশন শিফট করে আনা হয়।
উদাহরণ: Optimized Deletion
public class OptimizedArrayDeletion {
public static void main(String[] args) {
// Array initialization
int[] arr = {10, 20, 30, 40, 50};
// Deleting the element at index 2 (i.e., 30)
int index = 2;
// Shifting elements to the left to remove the element
for (int i = index; i < arr.length - 1; i++) {
arr[i] = arr[i + 1];
}
// Setting the last element to zero (or any default value)
arr[arr.length - 1] = 0;
// Display the new array after deletion
System.out.println("Array after optimized deletion:");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}
ব্যাখ্যা:
- Shifting Elements: যখন একটি উপাদান মুছে ফেলা হয়, তখন পরবর্তী উপাদানগুলো এক পজিশন করে শিফট করা হয় যাতে গ্যাপটি পূর্ণ হয়।
আউটপুট:
Array after optimized deletion:
10 20 40 50 0
সারাংশ
Array Operations যেমন Insertion, Deletion, এবং Traversal অত্যন্ত গুরুত্বপূর্ণ ডাটা স্ট্রাকচার অপারেশন, যা Java তে ডেটা ম্যানিপুলেশন সহজ করে তোলে। Java তে Arrays ব্যবহার করে ডেটা সংরক্ষণ এবং এক্সেস করতে খুব সহজ হয় এবং বিভিন্ন পদ্ধতি প্রয়োগ করে ডেটার পরিবর্তন এবং এক্সেস করা যায়।
- Traversal: Array এর প্রতিটি উপাদান একে একে এক্সেস করার জন্য ব্যবহৃত হয়।
- Insertion: Array তে নতুন উপাদান যোগ করার প্রক্রিয়া।
- Deletion: Array থেকে উপাদান মুছে ফেলার প্রক্রিয়া।
Java তে এই অপারেশনগুলো ব্যবহার করে আপনি সিস্টেমের জন্য দ্রুত এবং কার্যকরী ডাটা ম্যানিপুলেশন করতে সক্ষম হবেন।
Read more