我是一名教Scala的教師助理。作爲一項任務,我希望學生實施一個數學列表課程。在Scala中創建一個arraylist
在java中我這樣寫:
public class ArrayList<T> implements List<T>{....}
有,我應該用它來實現的ArrayList任何等效名單特質?
我是一名教Scala的教師助理。作爲一項任務,我希望學生實施一個數學列表課程。在Scala中創建一個arraylist
在java中我這樣寫:
public class ArrayList<T> implements List<T>{....}
有,我應該用它來實現的ArrayList任何等效名單特質?
那將是Seq[T]
,或者可能是IndexedSeq[T]
- 或者甚至List[T]
。
在斯卡拉有很多接口。首先,它們以可變和不可變的形式分開。在Java中ArrayList基於一個數組 - 因此它是一個索引序列。在斯卡拉這個接口是IndexedSeq[A]
。因爲ArrayList也是可變的,所以您可以選擇scala.collection.mutable.IndexedSeq
,否則scala.collection.immutable.IndexedSeq
。除了mutable.IndexedSeq,您還可以選擇scala.collection.mutable.Buffer
,這不保證訪問時間爲O(1)。
如果您想要更多功能的方法,您可以選擇Seq[A]
作爲接口,或者如果您希望能夠實現多個序列,則可以使用Iterable[A]
。
斯卡拉集合庫非常複雜。有關繼承的概述看看這些圖片:
scala.collection.immutable:http://www.scala-lang.org/docu/files/collections-api/collections.immutable.png
scala.collection.mutable:http://www.scala-lang.org/docu/files/collections-api/collections.mutable.png
另外,scaladoc提供有關的所有類很好的概述和收集圖書館的特點。
請注意,在Scala中List是一個真正的列表,這意味着它是一個LinearSeq,在Java中List更像是一個Scala中的IndexedSeq。
名稱ArrayList建議您應該混合使用IndexedSeq。事實上,你可能想通過IndexedSeqLike所提供的所有東西,即
class ArrayList[A] extends IndexedSeq[A] with IndexedSeqLike[A, ArrayList[A]]
這讓你頭,尾,採取,下降的具體實現,過濾如果你還想要地圖,flatMap等(所有的方法,採取類型參數)正常工作(返回ArrayList [A]),您還必須爲伴侶對象中的CanBuildFrom提供一個類型類實例,例如,
def cbf[A, B] = new CanBuildFrom[ArrayList[A], B, ArrayList[B]] {
// TODO Implementation!
}
我認爲Scala ArrayBuffers的行爲與Java ArrayList相似。 – paradigmatic 2012-03-13 21:41:45
'Scala中的Vector'是'IndexedSeq'的不可變樹實現; Java的'List'接口就像Scala的'Seq'特性 – 2012-03-13 22:12:43
是的,你是對的,在我的答案中得到了糾正。 – drexin 2012-03-13 22:29:44