Scala相当于java.util.ArrayList
我正在用Scala做一个项目,但我对该语言相当陌生,有Java背景。我看到Scala没有ArrayList,所以我想知道Scala与Java的ArrayList的等价物是什么,Java和Scala版本之间是否有任何重要区别Scala相当于java.util.ArrayList,java,scala,arraylist,Java,Scala,Arraylist,我正在用Scala做一个项目,但我对该语言相当陌生,有Java背景。我看到Scala没有ArrayList,所以我想知道Scala与Java的ArrayList的等价物是什么,Java和Scala版本之间是否有任何重要区别 编辑:我不是在寻找一个特定的行为,而是一个内部表示(存储在数组中的数据,但整个数组不可见,只有您使用的部分)。它是ArrayBuffer来自scala.collection.mutable。您可以找到scaladocs。很难说您应该做什么,因为您还没有说您对使用ArrayLi
编辑:我不是在寻找一个特定的行为,而是一个内部表示(存储在数组中的数据,但整个数组不可见,只有您使用的部分)。它是
ArrayBuffer
来自scala.collection.mutable
。您可以找到scaladocs。很难说您应该做什么,因为您还没有说您对使用ArrayList
的行为感兴趣。根据你想要利用的scala特征来思考更有用。这里有一个很好的解释:
也就是说,您可能需要某种
索引eq
我可以想出3个更具体的问题来解决您的问题:
- Scala的默认集合是什么
- 什么Scala集合具有类似于
的特性ArrayList
- Scala中
的好替代品是什么数组
List
接口是Seq
。还有一个更通用的接口,即GenSeq
——主要区别在于GenSeq
可能会根据实现情况以串行或并行方式处理操作
因为Scala允许程序员使用Seq
作为工厂,所以他们通常不会费心定义特定的实现,除非他们关心它。当他们这样做时,他们通常会选择Scala的列表
或向量
。它们都是不可变的,Vector
具有良好的索引访问性能。另一方面,List
做得很好,它做得很好
什么Scala集合具有类似于ArrayList
的特性?
这将是scala.collection.mutable.ArrayBuffer
Scala中数组
的好替代品是什么?
好消息是,您可以在Scala中使用Array
!在Java中,Array
经常被避免,因为它与泛型不兼容。它是一个共变量集合,而泛型是不变的,它是可变的——这使得它的共变量成为一种危险,它接受泛型不接受的原语,并且它有一组非常有限的方法
在Scala中,Array
——与Java中的Array
仍然相同——是不变的,这使得大多数问题得以解决。Scala接受AnyVal
(原语的等价物)作为其“泛型”的类型,即使它将执行自动装箱。通过“丰富我的库”模式,Seq
的所有方法都可用于Array
因此,如果您想要更强大的数组
,只需使用数组
那么一个收缩和增长的集合呢?
所有集合可用的默认方法都会生成新集合。例如,如果我这样做:
val ys = xs filter (x => x % 2 == 0)
然后,ys
将是一个新集合,而xs
仍将与此命令之前相同。无论xs
是什么:Array
,List
等等,这都是正确的
当然,这是有成本的——毕竟,您正在制作一个新的集合。Scala的不可变集合在处理这一开销方面要好得多,因为它们是持久的,但这取决于执行的操作
对于过滤器
,没有一个集合可以做得太多,但是列表
在通过预先添加元素或移除头部(实际上是堆栈的基本操作)来生成新集合方面具有优异的性能Vector
在一系列操作上都有很好的性能,但只有在集合不小的情况下,它才有回报。例如,对于多达100个元素的集合,总成本可能超过收益
因此,您可以向数组中添加或删除元素,Scala将为您生成一个新的数组,但这样做时您将支付完整副本的费用
Scala可变集合添加了一些其他方法。特别是,可以增加或减少大小的集合(而不生成新集合)实现了和特性。虽然它们不能保证这些操作的良好性能,但它们会向您指出要签出的集合。整个阵列可见与您使用的部分之间的区别是什么?@Daniel,对我来说,主要区别在于ArrayList为我处理大小(也就是说,如果我不知道它会提前发生什么或知道它会发生变化,我就不必担心分配额外的空间和跟踪我实际使用了多少空间)。是一个在线测试,它显示ArrayList
比LinkedList
快约3倍,尽管需要重新分配。我必须减少N
使其在线工作。在我自己的机器上,ArrayList
比LinkedList
快约10倍。结果如何如果LinkedList
更快,我会非常惊讶,因为每次插入(时间)都需要更多的赋值,每个元素都需要一个额外的节点对象(空间)“NavielC.SoBral:”是一个后续的在线测试,显示“代码> ARAYLIST 比“代码”快12倍,LIKEDLIST 中间插入。<代码> LIKEDLIST 只出现得更快。这里是元素——或者在