উত্তর:
জাভা শর্তে, স্কালার Seq
জাভা হবে List
, এবং স্কালার List
জাভা হবে LinkedList
।
দ্রষ্টব্য এটি Seq
একটি trait
যা জাভা এর সমতুল্য interface
, তবে আপ-আপ এবং আসন্ন ডিফেন্ডার পদ্ধতির সমতুল্য। স্কালা এর List
একটি বিমূর্ত শ্রেণি যা দ্বারা প্রসারিত Nil
এবং ::
, যা এর কংক্রিট বাস্তবায়ন List
।
সুতরাং, যেখানে জাভার List
একটি হল interface
, Scala এর List
একটি বাস্তবায়ন হয়।
তার পরেও যে, Scala এর List
অপরিবর্তনীয়, যা ক্ষেত্রে নয় LinkedList
। প্রকৃতপক্ষে, জাভাতে অপরিবর্তনীয় সংগ্রহগুলির সমতুল্য নেই (কেবলমাত্র পঠনযোগ্য বিষয়টিই গ্যারান্টি দেয় যে নতুন অবজেক্টটি পরিবর্তন করা যাবে না, তবে আপনি এখনও পুরানোটি পরিবর্তন করতে পারেন, এবং, "কেবলমাত্র পঠনযোগ্য")।
Scala এর List
অত্যন্ত কম্পাইলার এবং লাইব্রেরী দ্বারা অপ্টিমাইজ করা হয়, এবং এটি কার্যকরী প্রোগ্রামিং একটি মৌলিক ডাটা টাইপ আছে। তবে এর সীমাবদ্ধতা রয়েছে এবং এটি সমান্তরাল প্রোগ্রামিংয়ের পক্ষে অপর্যাপ্ত। এই দিনগুলির Vector
চেয়ে ভাল পছন্দ List
, তবে অভ্যাসটি ভাঙ্গা শক্ত।
Seq
ক্রমগুলির জন্য একটি ভাল সাধারণীকরণ, সুতরাং আপনি যদি ইন্টারফেসগুলিতে প্রোগ্রাম করেন তবে আপনার এটি ব্যবহার করা উচিত। নোট সেখানে আসলে তিন তাদের আছে: collection.Seq
, collection.mutable.Seq
এবং collection.immutable.Seq
, এবং এটি আধুনিক এক যে "ডিফল্ট" সুযোগ আমদানি হয়।
এছাড়াও আছে GenSeq
এবং ParSeq
। পরবর্তী পদ্ধতিগুলি যেখানে সম্ভব সেখানে সমান্তরালভাবে চলতে থাকে, যদিও পূর্ববর্তী উভয়েরই পিতা বা মাতা হয় Seq
এবং ParSeq
যখন কোনও কোডের সমান্তরালতার বিষয়টি বিবেচনা করে না তখন এটি উপযুক্ত সাধারণীকরণ হয়। এগুলি উভয়ই তুলনামূলকভাবে নতুনভাবে পরিচিত, তাই লোকেরা এগুলিকে এখনও বেশি ব্যবহার করে না।
UnsupportedOperationException
। জাভাতে একটি অপরিবর্তনীয় তালিকা তৈরি করতে আপনি সংগ্রহে.অনুবর্তিতযোগ্য তালিকা () ব্যবহার করেন এবং একইভাবে সেটস, মানচিত্র ইত্যাদির জন্য অন্যান্য পদ্ধতি রয়েছে ডকস.অরাকল
একটি সিক একটি আইটেবল যা উপাদানগুলির একটি সংজ্ঞায়িত ক্রম থাকে। সিকোয়েন্সগুলি ক্রম apply()
দৈর্ঘ্য পর্যন্ত 0 থেকে শুরু করে সূচকের জন্য একটি পদ্ধতি সরবরাহ করে। সিকের ক্যু, রেঞ্জ, তালিকা, স্ট্যাক এবং লিংকডলিস্ট সহ অনেকগুলি সাবক্লাস রয়েছে।
একটি তালিকা একটি সেক যা অপরিবর্তনীয় লিঙ্ক তালিকা হিসাবে প্রয়োগ করা হয়। সর্বশেষে ফার্স্ট-আউট (LIFO) অ্যাক্সেস নিদর্শনগুলির ক্ষেত্রে এটি সবচেয়ে ভাল ব্যবহৃত।
এখানে স্ক্যালাল এফএকিউ থেকে সম্পূর্ণ সংগ্রহ শ্রেণি শ্রেণিবিন্যাস :
Seq
একটি বৈশিষ্ট্য যা List
কার্যকর করে।
আপনি যদি নিজের ধারকটিকে এটি হিসাবে সংজ্ঞায়িত করেন তবে আপনি এমন Seq
কোনও ধারক ব্যবহার করতে পারেন যা Seq
বৈশিষ্ট্য প্রয়োগ করে।
scala> def sumUp(s: Seq[Int]): Int = { s.sum }
sumUp: (s: Seq[Int])Int
scala> sumUp(List(1,2,3))
res41: Int = 6
scala> sumUp(Vector(1,2,3))
res42: Int = 6
scala> sumUp(Seq(1,2,3))
res44: Int = 6
মনে রাখবেন যে
scala> val a = Seq(1,2,3)
a: Seq[Int] = List(1, 2, 3)
এর জন্য কেবল একটি ছোট হাত:
scala> val a: Seq[Int] = List(1,2,3)
a: Seq[Int] = List(1, 2, 3)
যদি ধারক প্রকারটি নির্দিষ্ট না করা হয় তবে অন্তর্নিহিত ডেটা স্ট্রাকচারটি ডিফল্ট হয় List
।
স্কালায়, একটি তালিকা সেক থেকে উত্তরাধিকার সূত্রে প্রাপ্ত, তবে পণ্য প্রয়োগ করে ; এখান থেকে সঠিক সংজ্ঞা নেই তালিকা :
sealed abstract class List[+A] extends AbstractSeq[A] with Product with ...
[নোট: প্রকৃত সংজ্ঞা । একটি বাচ্চা ও করতে Scala এর খুব শক্তিশালী সংগ্রহ ফ্রেমওয়ার্ক ব্যবহার হইয়া এই রকম আরো জটিল বিট অনুক্রম হল]
যেমন @ ড্যানিয়েল-সি-সোব্রাল বলেছিলেন, তালিকাটি বৈশিষ্ট সিককে প্রসারিত করে এবং একটি বিমূর্ত শ্রেণি দ্বারা প্রয়োগ করা হয় scala.collection.immutable.$colon$colon
(বা ::
সংক্ষিপ্তের জন্য), তবে প্রযুক্তিগত দিকটি বিবেচনা করে মনে রাখবেন যে আমরা ব্যবহার করি বেশিরভাগ তালিকা এবং সিকগুলি শুরু হয় Seq(1, 2, 3)
বা List(1, 2, 3)
উভয়ই প্রত্যাবর্তন করে scala.collection.immutable.$colon$colon
সুতরাং, একটি লিখতে পারেন:
var x: scala.collection.immutable.$colon$colon[Int] = null
x = Seq(1, 2, 3).asInstanceOf[scala.collection.immutable.$colon$colon[Int]]
x = List(1, 2, 3).asInstanceOf[scala.collection.immutable.$colon$colon[Int]]
ফলস্বরূপ, আমি কেবলমাত্র সেই বিষয়গুলির চেয়ে তর্ক করব যা আপনি যে পদ্ধতিগুলি প্রকাশ করতে চান তা উদাহরণস্বরূপ আপনি Seend ::
থেকে অপ্রয়োজনীয় তালিকার তালিকা থেকে ব্যবহার করতে পারেন +:
এবং আমি ব্যক্তিগতভাবে ডিফল্টরূপে সিকের সাথে লেগে থাকি end
String
এটি সংগ্রহ নয়, এটি জাভা প্রোগ্রামারদের সাথে পরিচিত অপরিবর্তনীয় শ্রেণির উদাহরণ।