জাভা-তে অ্যারে নিয়ে কাজ করার সময় আপনি অ্যারেটির একটি কপি তৈরি করতে চাইতে পারেন। উদাহরণস্বরূপ, যদি আপনি একটি কফি শপ চালান এবং মৌসুমি মেনু তৈরি করতে চান, তবে আপনার মূল মেনুর একটি কপি তৈরি করে সেটি ভিত্তি হিসেবে ব্যবহার করতে পারেন।
জাভা-তে অ্যারে কপি করার অনেক পদ্ধতি রয়েছে। এই টিউটোরিয়ালে চারটি সাধারণ পদ্ধতি আলোচনা করা হবে এবং প্রতিটি লাইন-বাই-লাইন ব্যাখ্যা করা হবে। এটি পড়ার পর আপনি জাভা-তে অ্যারে কপি করার মাস্টার হয়ে যাবেন।
জাভা অ্যারে
জাভা-তে একটি অ্যারে হলো একটি কন্টেইনার যা একক টাইপের মান ধারণ করে। উদাহরণস্বরূপ, একটি অ্যারে বইয়ের তালিকা বা ডার্টস গেমে খেলোয়াড়াদের স্কোর সংরক্ষণ করতে ব্যবহৃত হয়।
অ্যারে তখন উপযোগী যখন আপনি অনেক একই ধরণের মান নিয়ে কাজ করতে চান কারণ সেগুলো একটি কালেকশনে সংরক্ষণ করা যায়। এটি কোড সংক্ষিপ্ত করতে সাহায্য করে এবং একই মেথড একসাথে অনেক মানের ওপর চালাতে পারে।
আমাদের কফি শপে বিক্রয় হওয়া কফি সংরক্ষণের জন্য অ্যারে:
String[] coffees = {"Espresso", "Mocha", "Latte", "Cappuccino", "Pour Over", "Flat White"};
এখানে coffees নামে একটি অ্যারে ঘোষণা করা হয়েছে যা String মান সংরক্ষণ করে। এতে ছয়টি মান রয়েছে।
অ্যারেতে প্রতিটি আইটেমকে একটি ইনডেক্স নম্বর দেওয়া হয় যা ০ থেকে শুরু হয়, যা অ্যারেতে আইটেমগুলোকে আলাদা আলাদা রেফারেন্স করতে ব্যবহৃত হয়।
অ্যাসাইনমেন্ট অপারেটর ব্যবহার করে অ্যারে কপি
অ্যারে কপি করার সবচেয়ে সাধারণ পদ্ধতির একটি হলো অ্যাসাইনমেন্ট অপারেটর ব্যবহার করা। অ্যাসাইনমেন্ট অপারেটর একটি অ্যারেয়ে মান অ্যাসাইন করতে ব্যবহৃত হয়। এটি ব্যবহার করে একটি বিদ্যমান অ্যারেতের কন্টেন্ট একটি নতুন ভেরিয়েবলে অ্যাসাইন করা যায়, যা একটি কপি তৈরি করে।
কফি শপ উদাহরণে ফিরি। coffees অ্যারেতি কপি করে summer_coffees তৈরি করতে চাই:
class CopyAssignment {
public static void main(String[] args) {
String[] coffees = {"Espresso", "Mocha", "Latte", "Cappuccino", "Pour Over", "Flat White"};
String[] summer_coffees = coffees;
for (String c: summer_coffees) {
System.out.print(c + ",");
}
}
}
আউটপুট: Espresso, Mocha, Latte, Cappuccino, Pour Over, Flat White,
কোড ব্যাখ্যা: coffees` অ্যারে ঘোষণা করা হয়েছে। এরপর অ্যাসাইনমেন্ট অপারেটর (=) ব্যবহার করে এর মান summer_coffees এ অ্যাসাইন করা হয়েছে। for-each লুপ দিয়ে সব আইটেম প্রিন্ট করা হয়েছে।
খামি: এই পদ্ধতিতে যদি একটি অ্যারেতে পরিবর্তন করা হয়, তবে অন্যটিও পরিবর্তিত হয়। কারণ এটি শ্যালো কপি (shallow copy) তৈরি করে—দুই অ্যারে একই অবজেক্ট রেফার করে।
লুপ ব্যবহার করে অ্যারে কপি (ডিপ কপি)
অ্যাসাইনমেন্ট অপারেটর পদ্ধতিটি শ্যালো কপি তৈরি করে। কিন্তু আমাদের অনেক সময় ডিপ কপি (deep copy) দরকার হয়। ডিপ কপি একটি নতুন অ্যারে অবজেক্ট তৈরি করে এবং মানগুলো কপি করে। ফলে নতুন অ্যারে পরিবর্তন করলে মূল অ্যারে প্রভাবিত হয় না।
for লুপ ব্যবহার করে ডিপ কপি তৈরি করা যায়:
import java.util.Arrays;
class LoopCopy {
public static void main(String[] args) {
String[] coffees = {"Espresso", "Mocha", "Latte", "Cappuccino", "Pour Over", "Flat White"};
String[] summer_coffees = new String[6];
for (int i = 0; i < coffees.length; ++i) {
summer_coffees[i] = coffees[i];
}
System.out.println(Arrays.toString(summer_coffees));
}
}
আউটপুট: [Espresso, Mocha, Latte, Cappuccino, Pour Over, Flat White]
কোড ব্যাখ্যা:
java.util.Arraysইম্পোর্ট করা হয়েছে (toString() মেথডের জন্য)।coffeesঅ্যারে ঘোষণা করা হয়েছে।summer_coffeesঅ্যারে ৬টি মান ধারণ করার জন্য আরম্ভ করা হয়েছে।- for লুপ দিয়ে
coffeesএর প্রতিটি আইটেমsummer_coffeesএ কপি করা হয়েছে। Arrays.toString()দিয়ে কপি করা অ্যারে প্রিন্ট করা হয়েছে।
copyOfRange() মেথড ব্যবহার করা
Arrays.copyOfRange() মেথড অ্যারে কপি করতে ব্যবহৃত হয়। এটি java.util.Arrays ক্লাসের অংশ।
সিনট্যাক্স:
DataType[] newArray = Arrays.copyOfRange(oldArray, indexPos, length);
প্যারামিটার ব্যাখ্যা:
- DataType - নতুন অ্যারেতে কী টাইপের ডেটা থাকবে।
- newArray - নতুন অ্যারের নাম।
- oldArray - যে অ্যারেটি কপি করা হবে।
- indexPos - কপি শুরু করার ইনডেক্স পজিশন।
- length - কতগুলো মান কপি করা হবে।
উদাহরণ:
import java.util.Arrays;
class CopyUsingRange {
public static void main(String[] args) {
String[] coffees = {"Espresso", "Mocha", "Latte", "Cappuccino", "Pour Over", "Flat White"};
String[] summer_coffees = Arrays.copyOfRange(coffees, 0, coffees.length);
System.out.println("Summer coffees: " + Arrays.toString(summer_coffees));
}
}
আউটপুট: Summer coffees: [Espresso, Mocha, Latte, Cappuccino, Pour Over, Flat White]
arraycopy() মেথড ব্যবহার করা
System.arraycopy() মেথড একটি অ্যারে থেকে অন্য অ্যারেতে ডেটা কপি করতে ব্যবহৃত হয়। এটি System ক্লাসের অংশ এবং কপি কাস্টোমাইজ করার জন্য অনেক অপশন দেয়।
সিনট্যাক্স:
System.arraycopy(sourceArray, startingPos, newArray, newArrayStartingPos, length);
পাঁচটি প্যারামিটার:
- sourceArray - কপি করার সোর্স অ্যারে।
- startingPos - সোর্স অ্যারেতে কপি শুরু করার ইনডেক্স।
- newArray - কপি করা মানগুলো রাখার নতুন অ্যারে।
- newArrayStartingPos - নতুন অ্যারেতে কপি করা মানগুলো রাখার শুরুতে ইনডেক্স।
- length - কপি করার এলিমেন্টের সংখ্যা।
উদাহরণ:
import java.util.Arrays;
class ArrayCopyMethod {
public static void main(String[] args) {
String[] coffees = {"Espresso", "Mocha", "Latte", "Cappuccino", "Pour Over", "Flat White"};
String[] summer_coffees = new String[6];
System.arraycopy(coffees, 0, summer_coffees, 0, coffees.length);
System.out.println("Summer coffees: " + Arrays.toString(summer_coffees));
}
}
আউটপুট: Summer coffees: [Espresso, Mocha, Latte, Cappuccino, Pour Over, Flat White]
উপসংহার
অ্যারে কপি করা লিস্ট নিয়ে কাজ করার সময় একটি সাধারণ অপারেশন। এই টিউটোরিয়ালে জাভা-তে অ্যারে কপি করার চারটি পদ্ধতি আলোচনা করা হয়েছে:
- অ্যাসাইনমেন্ট অপারেটর দিয়ে শ্যালো কপি
forলুপ দিয়ে ডিপ কপিcopyOfRange()মেথড দিয়ে কপিarraycopy()সিস্টেম মেথড দিয়ে কপি
এখন আপনি জাভা-তে প্রফেশনালের মতো অ্যারে কপি করার জন্য প্রস্তুত!