উত্তর:
Scala List
, একটি অপরিবর্তনীয় রিকার্সিভ ডাটা স্ট্রাকচার যা Scala এ ধরনের একটি মৌলিক কাঠামো যে আপনি উচিত (সম্ভবত) একটি চেয়ে অনেক বেশী এটা ব্যবহার করা Array
(যা আসলে চপল - অপরিবর্তনীয় এনালগ এর Array
হয় IndexedSeq
)।
আপনি যদি একটি জাভা পটভূমি থেকে আসছে, তাহলে সুস্পষ্ট সমান্তরাল যখন ব্যবহার করা LinkedList
বেশি ArrayList
। পূর্ববর্তীটি সাধারণত সেই তালিকাগুলির জন্য ব্যবহৃত হয় যা কেবল সর্বদা ট্র্যাভারড হয় (এবং যার আকারটি অগ্রভাগ হিসাবে জানা যায় না) তবে পরবর্তীগুলি সেই তালিকাগুলির জন্য ব্যবহার করা উচিত যাগুলির পরিচিত আকার (বা সর্বোচ্চ আকার) থাকে বা যার জন্য দ্রুত এলোমেলো অ্যাক্সেস গুরুত্বপূর্ণ।
ListBuffer
একটি ধ্রুবক-সময় রূপান্তর সরবরাহ করে List
যা এর ListBuffer
পরে যদি রূপান্তর প্রয়োজন হয় তবে তা ব্যবহারের একা কারণ ।
একটি স্কেল Array
JVM এ জাভা অ্যারের দ্বারা প্রয়োগ করা উচিত, এবং সুতরাং এটির চেয়ে একটি Array[Int]
আরও অনেক বেশি পারফরম্যান্ট হতে পারে (যা এর বিষয়বস্তুগুলিকে বক্স করবে, যদি না আপনি নতুন বৈশিষ্ট্যযুক্ত স্কালার অতি সাম্প্রতিক সংস্করণ ব্যবহার না করেন ) ।int[]
List[Int]
@specialized
তবে আমি মনে করি যে Array
স্কালায় এস এর ব্যবহার সর্বনিম্ন রাখা উচিত কারণ এটি অনুভব করে যে আপনার অ্যারেটি প্রয়োজনীয় আদিম ধরণের দ্বারা সত্যই সমর্থনযোগ্য হবে কিনা তা স্থির করার জন্য আপনার হুডের নীচে কী চলছে তা জেনে রাখা দরকার may একটি মোড়ক টাইপ হিসাবে বক্স করা।
ইতিমধ্যে পোস্ট করা উত্তরগুলি ছাড়াও, এখানে কিছু সুনির্দিষ্ট।
Array[A]
আক্ষরিক অর্থে একটি জাভা অ্যারে থাকাকালীন , একটি List[A]
হ'ল এক অবিচ্ছেদ্য ডেটা স্ট্রাকচার যা হয় Nil
(খালি তালিকা) হয় বা একটি জুড়ি থাকে (A, List[A])
।
পারফরম্যান্স পার্থক্য
Array List
Access the ith element θ(1) θ(i)
Delete the ith element θ(n) θ(i)
Insert an element at i θ(n) θ(i)
Reverse θ(n) θ(n)
Concatenate (length m,n) θ(n+m) θ(n)
Count the elements θ(1) θ(n)
মেমরির পার্থক্য
Array List
Get the first i elements θ(i) θ(i)
Drop the first i elements θ(n-i) θ(1)
Insert an element at i θ(n) θ(i)
Reverse θ(n) θ(n)
Concatenate (length m,n) θ(n+m) θ(n)
সুতরাং আপনার যদি দ্রুত এলোমেলো অ্যাক্সেসের প্রয়োজন না হয়, উপাদানগুলি গণনা করা প্রয়োজন বা কোনও কারণে আপনার ধ্বংসাত্মক আপডেটের প্রয়োজন হয় না, List
এটি একটির চেয়ে ভাল Array
।
list = list.drop(i)
। বা, হুডের পিছনে কিছু জাদু দেখা দেয়?
drop
কখনও বাদ পড়ে না এমন তালিকার অংশটি অনুলিপি করার দরকার নেই। যেমন (x::xs).drop(1)
ঠিক xs
, না একটি এর "কপি করো" xs
।
একটি অ্যারে পরিবর্তনীয়, যার অর্থ আপনি প্রতিটি সূচকের মান পরিবর্তন করতে পারবেন, যখন একটি তালিকা (ডিফল্টরূপে) অপরিবর্তনীয়, এর অর্থ হ'ল প্রতিবার আপনি কোনও পরিবর্তন করার পরে একটি নতুন তালিকা তৈরি করা হয়। বেশীর ভাগ ক্ষেত্রে এর অপরিবর্তনীয় datatypes সাথে কাজ করার অনুমোদন আরো "কার্মিক" শৈলী এবং আপনি সম্ভবত চেষ্টা করুন এবং মত নির্মান সঙ্গে একটি তালিকা ব্যবহার করা উচিত yield
, foreach
, match
এবং তাই ঘোষণা।
কর্মক্ষমতা বৈশিষ্ট্যগুলির জন্য, অ্যারের উপাদানগুলিতে এলোমেলো অ্যাক্সেস সহ দ্রুত হয়, অন্যদিকে নতুন উপাদানগুলি প্রিপেন্ডিং (যুক্ত) করার সময় একটি তালিকা দ্রুত হয়। তাদের উপর আইট্রেট করা তুলনামূলক।
iterate over
ক্যাশের কারণে