স্কালার কালেকশন ফ্রেমওয়ার্কে, লিস্ট একটি জনপ্রিয় ডেটা স্ট্রাকচার, যা একটি সিকোয়েন্স ডেটা সংরক্ষণ করতে ব্যবহৃত হয়। স্কালা লিস্ট দুটি প্রধান ধরনের হয়: ইমিউটেবল লিস্ট (Immutable List) এবং **মিউটেবল লিস্ট (Mutable List)**। এদের মধ্যে কিছু গুরুত্বপূর্ণ পার্থক্য রয়েছে।
১. ইমিউটেবল লিস্ট (Immutable List)
ইমিউটেবল লিস্ট এমন একটি লিস্ট, যার উপাদানগুলি একবার তৈরি হওয়ার পর আর পরিবর্তন করা যায় না। অর্থাৎ, আপনি যদি লিস্টে কোনো উপাদান যোগ বা মুছে ফেলতে চান, তাহলে একটি নতুন লিস্ট তৈরি হবে এবং পুরোনো লিস্ট অপরিবর্তিত থাকবে। স্কালা ভাষায়, List সাধারণত ইমিউটেবল হয়।
ইমিউটেবল লিস্টের বৈশিষ্ট্য:
- একবার তৈরি হলে এর উপাদান বা কাঠামো পরিবর্তন করা যায় না।
- ফাংশনাল প্রোগ্রামিং প্যাটার্নের সাথে সামঞ্জস্যপূর্ণ।
- থ্রেড সেফ (Thread-safe), কারণ একই লিস্টে একাধিক থ্রেড কাজ করলেও ডেটা অপরিবর্তিত থাকে।
- মেমরি ব্যবস্থাপনা হতে পারে বেশি কারণ যখন লিস্টে কোনো পরিবর্তন হয়, তখন নতুন একটি লিস্ট তৈরি হয়।
- সাধারণ অপারেশন যেমন
map,filter,flatMapনিরাপদভাবে ব্যবহার করা যায়।
ইমিউটেবল লিস্টের উদাহরণ:
val list = List(1, 2, 3)
val newList = 0 :: list // একটি নতুন লিস্ট তৈরি হবে: List(0, 1, 2, 3)২. মিউটেবল লিস্ট (Mutable List)
মিউটেবল লিস্ট এমন একটি লিস্ট, যার উপাদানগুলো পরিবর্তনযোগ্য। আপনি এই লিস্টে নতুন উপাদান যোগ করতে পারেন বা পুরোনো উপাদান মুছে ফেলতে পারেন, এবং এটি বিদ্যমান লিস্টের কাঠামো পরিবর্তন করবে। স্কালায়, ListBuffer হল একটি সাধারণ মিউটেবল লিস্ট।
মিউটেবল লিস্টের বৈশিষ্ট্য:
- উপাদানগুলি পরিবর্তনযোগ্য, অর্থাৎ লিস্টে উপাদান যোগ, মুছে ফেলা, বা আপডেট করা যায়।
- থ্রেড সেফ নয়, কারণ একাধিক থ্রেড একই লিস্টের উপাদান পরিবর্তন করতে পারে।
- মেমরি ব্যবস্থাপনায় কার্যকর, কারণ একটি পরিবর্তন হলে শুধুমাত্র বর্তমান লিস্টের কাঠামো পরিবর্তিত হয়, নতুন লিস্ট তৈরি করতে হয় না।
- দ্রুত অপারেশন, কারণ এটি সরাসরি বিদ্যমান লিস্টে পরিবর্তন করে।
মিউটেবল লিস্টের উদাহরণ:
import scala.collection.mutable.ListBuffer
val list = ListBuffer(1, 2, 3)
list += 4 // লিস্টে 4 যোগ করা হবে
list -= 2 // লিস্ট থেকে 2 মুছে ফেলা হবেইমিউটেবল এবং মিউটেবল লিস্টের মধ্যে পার্থক্য
| বৈশিষ্ট্য | ইমিউটেবল লিস্ট | মিউটেবল লিস্ট |
|---|---|---|
| পরিবর্তনযোগ্যতা | একবার তৈরি হলে পরিবর্তন করা যায় না | উপাদান যোগ বা মুছে ফেলা যায় |
| মেমরি ব্যবস্থাপনা | নতুন লিস্ট তৈরি হয় যখন পরিবর্তন করা হয় | বিদ্যমান লিস্ট পরিবর্তন হয়, নতুন লিস্ট তৈরি হয় না |
| থ্রেড সেফটি | থ্রেড সেফ (একাধিক থ্রেড একই লিস্ট ব্যবহার করতে পারে) | থ্রেড সেফ নয় |
| ফাংশনাল প্রোগ্রামিং | ফাংশনাল প্রোগ্রামিংয়ের সাথে সম্পূর্ণ সামঞ্জস্যপূর্ণ | ফাংশনাল প্রোগ্রামিংয়ের সাথে কম সামঞ্জস্যপূর্ণ |
| পারফরম্যান্স | পারফরম্যান্স কম (কারণ নতুন লিস্ট তৈরি করতে হয়) | দ্রুত (কারণ সরাসরি পরিবর্তন করা হয়) |
| উপযুক্ত ব্যবহার | যখন নিরাপত্তা এবং অপরিবর্তনীয়তা প্রয়োজন | যখন ডেটার পরিবর্তন করতে হবে |
সারাংশ
- ইমিউটেবল লিস্ট নিরাপদ এবং অপরিবর্তনীয়, যা থ্রেড সেফ এবং ফাংশনাল প্রোগ্রামিংয়ের জন্য উপযুক্ত।
- মিউটেবল লিস্ট দ্রুত এবং কার্যকর, তবে থ্রেড সেফ নয় এবং ডেটা পরিবর্তনের জন্য উপযুক্ত।
Read more