C#-এ ArrayList.Clone() মেথড একটি শ্যালো কপি (shallow copy) তৈরি করে। শ্যালো কপি মানে নতুন ArrayList তৈরি হয় কিন্তু এর এলিমেন্টগুলো মূল ArrayList-এর সাথে একই অবজেক্ট রেফারেন্স শেয়ার করে (রেফারেন্স টাইপের ক্ষেত্রে)। ভ্যালু টাইপের ক্ষেত্রে মান কপি হয়।
উদাহরণ ১: ArrayList ক্লোন করা
using System;
using System.Collections;
public class Demo {
public static void Main() {
ArrayList list = new ArrayList();
list.Add("One");
list.Add("Two");
list.Add("Three");
list.Add("Four");
list.Add("Five");
list.Add("Six");
list.Add("Seven");
list.Add("Eight");
Console.WriteLine("ArrayList এলিমেন্টসমূহ...");
foreach (string str in list) {
Console.WriteLine(str);
}
Console.WriteLine("ArrayList রিড-অনলি? = " + list.IsReadOnly);
Console.WriteLine("ArrayList-এ 'Six' আছে কি? = " + list.Contains("Six"));
list.Insert(4, "Twelve");
Console.WriteLine("\nArrayList এলিমেন্টসমূহ (আপডেটেড)...");
foreach (string str in list) {
Console.WriteLine(str);
}
ArrayList list2 = new ArrayList();
list2 = (ArrayList)list.Clone();
Console.WriteLine("\nক্লোন করা ArrayList...");
foreach (string str in list2) {
Console.WriteLine(str);
}
}
}
আউটপুট
ArrayList এলিমেন্টসমূহ... One Two Three Four Five Six Seven Eight ArrayList রিড-অনলি? = False ArrayList-এ 'Six' আছে কি? = True ArrayList এলিমেন্টসমূহ (আপডেটেড)... One Two Three Four Twelve Five Six Seven Eight ক্লোন করা ArrayList... One Two Three Four Twelve Five Six Seven Eight
উদাহরণ ২: ডুপ্লিকেট সহ ArrayList ক্লোন
using System;
using System.Collections;
public class Demo {
public static void Main(String[] args) {
ArrayList list1 = new ArrayList();
list1.Add("A");
list1.Add("B");
list1.Add("C");
list1.Add("D");
list1.Add("E");
list1.Add("F");
list1.Add("G");
list1.Add("H");
list1.Add("I");
Console.WriteLine("ArrayList1-এ এলিমেন্টসমূহ...");
foreach (string res in list1) {
Console.WriteLine(res);
}
ArrayList list2 = new ArrayList();
list2.Add("A");
list2.Add("B");
list2.Add("C");
list2.Add("D");
list2.Add("E");
list2.Add("F");
list2.Add("G");
list2.Add("H");
list2.Add("I");
list2.Add("G");
list2.Add("I");
Console.WriteLine("ArrayList2-এ এলিমেন্টসমূহ...");
foreach (string res in list2) {
Console.WriteLine(res);
}
Console.WriteLine("ArrayList2-এ এলিমেন্ট সংখ্যা = " + list2.Count);
list2.Remove("G");
Console.WriteLine("ArrayList2-এ এলিমেন্টসমূহ (আপডেটেড)...");
foreach (string res in list2) {
Console.WriteLine(res);
}
Console.WriteLine("ArrayList2-এ এলিমেন্ট সংখ্যা (আপডেটেড) = " + list2.Count);
ArrayList list3 = new ArrayList();
list3 = (ArrayList)list2.Clone();
Console.WriteLine("\nArrayList2 থেকে ক্লোন করা ArrayList...");
foreach (string str in list3) {
Console.WriteLine(str);
}
}
}
আউটপুট
ArrayList1-এ এলিমেন্টসমূহ... A B C D E F G H I ArrayList2-এ এলিমেন্টসমূহ... A B C D E F G H I G I ArrayList2-এ এলিমেন্ট সংখ্যা = 11 ArrayList2-এ এলিমেন্টসমূহ (আপডেটেড)... A B C D E F H I G I ArrayList2-এ এলিমেন্ট সংখ্যা (আপডেটেড) = 10 ArrayList2 থেকে ক্লোন করা ArrayList... A B C D E F H I G I
ব্যাখ্যা: Clone() শ্যালো কপি তৈরি করে। স্ট্রিং হলো রেফারেন্স টাইপ কিন্তু ইমিউটেবল, তাই শ্যালো কপি কোনো সমস্যা সৃষ্টি করে না। যদি এলিমেন্টগুলো মিউটেবল অবজেক্ট হত, তবে একটাতে পরিবর্তন অন্যটিতে প্রতিফলিত হত। গভীর কপি (deep copy) এর জন্য ম্যানুয়াল কপি বা সিরিয়ালাইজেশন প্রয়োজন।