在Scala中创建一个arraylist

时间:2012-03-13 19:36:54

标签: scala arraylist

我是一个教Scala的班级的老师助理。作为一项任务,我希望学生们实施一个arraylist课程。

在java中我写道:

public class ArrayList<T> implements List<T>{....} 

我是否应该使用任何等效的List特征来实现arraylist?

4 个答案:

答案 0 :(得分:3)

名称​​ ArrayList 表明您应该混合使用 IndexedSeq 。实际上你可能想得到 IndexedSeqLike 提供的所有好东西,即

class ArrayList[A] extends IndexedSeq[A] with IndexedSeqLike[A, ArrayList[A]]

这将为您提供 head tail take drop filter <的具体实现/ em>,等等。如果你还想要 map flatMap 等(所有采用类型参数的方法)才能正常工作(返回 ArrayList [A] ),您还必须在随播对象中为 CanBuildFrom 提供类型类实例,例如

def cbf[A, B] = new CanBuildFrom[ArrayList[A], B, ArrayList[B]] {
  // TODO Implementation!
}

答案 1 :(得分:2)

scala集合库非常复杂。有关继承的概述,请查看这些图片:

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。

答案 2 :(得分:1)

在Scala中有许多接口。首先,它们在可变和不可变的中分开。在Java中,ArrayList基于一个数组 - 因此它是一个索引序列。在Scala中,此接口为IndexedSeq[A]。由于ArrayList也是可变的,因此您可以选择scala.collection.mutable.IndexedSeq,否则scala.collection.immutable.IndexedSeq。您也可以选择scala.collection.mutable.Buffer而不是mutable.IndexedSeq,这不能保证访问时间为O(1)。

如果您想要更具功能性的方法,可以选择Seq[A]作为界面,或者Iterable[A],如果您希望能够实现更多的序列。

答案 3 :(得分:0)

那可能是Seq[T],也可能是IndexedSeq[T] - 甚至是List[T]