3 回答

TA貢獻1963條經驗 獲得超6個贊
Scala中的List是不可變的遞歸數據(immutable recursive data),是Scala中的一種基礎結構,你應該多用List而不是Array(Array實際上是mutable,不可變(immutable)的Array是IndexedSeq)
Mutable Structures
ListBuffer提供一個常數時間的轉換到List。
一個Scala的Array應該是由Java array生成的,因此一個Array[Int]也許比List[Int]更有效率。
但是,我認為Scala中數組盡量少用,因為它感覺是你真的需要知道底層發生了什么,來決定是否Array將所需的基本數據類型進行備份,或者可能boxed as a wrapper type.

TA貢獻1829條經驗 獲得超7個贊
Arrays are mutable, indexed collections of values. Array[T] is Scala's representation for Java's T[].
Array:
可變
用下標訪問,利于隨機訪問
是Java數組的一種表示
List is a class for immutable linked lists representing ordered collections
of elements of type A.This class comes with two implementing case classes scala.Nil and scala.:: that implement the abstract members isEmpty, head and tail.This class is optimal for last-in-first-out (LIFO), stack-like access patterns. If you need another access
pattern, for example, random access or FIFO, consider using a collection more suited to this than List.
List:
不可變
為后進先出做了優化,像棧一樣的訪問模式
支持用::在模式匹配中取出head和tail

TA貢獻1830條經驗 獲得超9個贊
Scala的Seq將是Java的List,Scala的List將是Java的LinkedList。
請注意,Seq是一個trait,它相當于Java的接口,但相當于即將到來的防御者方法。 Scala的List是一個抽象類,由Nil和::擴展,這是List的具體實現。
所以,在Java的List是一個接口,Scala的List是一個實現。
除此之外,Scala的List是不可變的,這不是LinkedList的情況。事實上,Java沒有等價的不可變集合(只讀的東西只保證新的對象不能改變,但你仍然可以改變舊的,因此,“只讀”一個)。
Scala的List是由編譯器和庫高度優化的,它是函數式編程中的基本數據類型。然而,它有限制,它不足以并行編程。這些天,Vector是一個比List更好的選擇,但習慣是很難打破。
Seq是一個很好的泛化序列,所以如果你編程到接口,你應該使用它。注意,實際上有三個:collection.Seq,collection.mutable.Seq和collection.immutable.Seq,它是后一個是“默認”導入到范圍。
還有GenSeq和ParSeq。后面的方法在可能的情況下并行運行,前者是Seq和ParSeq的父代,這是當代碼的并行性無關緊要的合適的泛化。它們都是相對新引入的,因此人們不會使用它們。
- 3 回答
- 0 關注
- 5286 瀏覽
添加回答
舉報