जवाबों:
स्काला List
, अपरिवर्तनीय पुनरावर्ती डेटा संरचना जो स्काला में इस तरह के एक मौलिक संरचना है कि आप करना चाहिए (शायद) एक से अधिक उसका उपयोग Array
(जो वास्तव में है परिवर्तनशील - अपरिवर्तनीय अनुरूप की Array
है IndexedSeq
)।
यदि आप एक जावा बैकग्राउंड से आ रहे हैं, तो स्पष्ट पैरलल LinkedList
ओवर कब उपयोग करना है ArrayList
। पूर्व आमतौर पर उन सूचियों के लिए उपयोग किया जाता है जो केवल कभी-कभी ट्रैवर्स किए गए हैं (और जिनके आकार का पता नहीं है) जबकि उत्तरार्द्ध का उपयोग उन सूचियों के लिए किया जाना चाहिए जिनके पास या तो ज्ञात आकार (या अधिकतम आकार) है या जिसके लिए तेजी से यादृच्छिक अभिगम महत्वपूर्ण है।
ListBuffer
एक निरंतर-समय रूपांतरण प्रदान करता है, List
जो अकेले उपयोग करने का कारण है ListBuffer
यदि इस तरह के बाद के रूपांतरण की आवश्यकता होती है।
एक Array
जावा सरणी द्वारा JVM पर एक स्केला लागू किया जाना चाहिए, और इसलिए एक से Array[Int]
अधिक (जैसे int[]
) ए List[Int]
(जो कि इसकी सामग्री को बॉक्स में देगा, जब तक कि आप स्काला के नवीनतम संस्करणों का उपयोग नहीं कर रहे हैं जो नई @specialized
सुविधा हो) ।
हालांकि, मुझे लगता है कि Array
स्काला में एस का उपयोग कम से कम रखा जाना चाहिए क्योंकि ऐसा लगता है कि आपको वास्तव में यह जानने की जरूरत है कि हुड के नीचे क्या चल रहा है यह तय करने के लिए कि क्या वास्तव में आपका सरणी आवश्यक आदिम प्रकार से समर्थित होगा, या हो सकता है। एक रैपर प्रकार के रूप में बॉक्सिंग करें।
पहले से ही पोस्ट किए गए उत्तरों के अलावा, यहां कुछ विशिष्टताएं हैं।
जबकि एक 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)
इसलिए जब तक आपको तेजी से यादृच्छिक अभिगम की आवश्यकता नहीं होती है, तत्वों की गिनती करने की आवश्यकता होती है, या किसी कारण से आपको विनाशकारी अपडेट की आवश्यकता होती है, एक a List
से बेहतर है Array
।
list = list.drop(i)
:। या, हुड के पीछे कुछ जादू होता है?
drop
कभी नहीं छोड़ा गया था, उस हिस्से को कॉपी करने की आवश्यकता नहीं है। जैसे (x::xs).drop(1)
कि वास्तव में xs
, "कॉपी" नहीं है xs
।
एक सरणी परिवर्तनशील है, जिसका अर्थ है कि आप प्रत्येक सूचकांक के मूल्यों को बदल सकते हैं, जबकि एक सूची (डिफ़ॉल्ट रूप से) अपरिवर्तनीय है, जिसका अर्थ है कि हर बार जब आप एक संशोधन करते हैं तो एक नई सूची बनाई जाती है। ज्यादातर मामलों में यह अपरिवर्तनीय डेटाटाइप्स साथ काम करने के लिए एक अधिक "कार्यात्मक" शैली का है और आप शायद कोशिश करते हैं और जैसे निर्माणों के साथ एक सूची का उपयोग करना चाहिए yield
, foreach
, match
और इसके आगे।
प्रदर्शन विशेषताओं के लिए, तत्वों के लिए यादृच्छिक अभिगम के साथ एक ऐरे तेजी से होता है, जबकि नए तत्वों को प्रस्तुत करने (जोड़ने) के दौरान एक सूची तेज होती है। उनके ऊपर Iterating तुलनीय है।
iterate over
, जब कैश के कारण