Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala相当于java.util.ArrayList_Java_Scala_Arraylist - Fatal编程技术网

Scala相当于java.util.ArrayList

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

我正在用Scala做一个项目,但我对该语言相当陌生,有Java背景。我看到Scala没有ArrayList,所以我想知道Scala与Java的ArrayList的等价物是什么,Java和Scala版本之间是否有任何重要区别


编辑:我不是在寻找一个特定的行为,而是一个内部表示(存储在数组中的数据,但整个数组不可见,只有您使用的部分)。

它是
ArrayBuffer
来自
scala.collection.mutable
。您可以找到scaladocs。

很难说您应该做什么,因为您还没有说您对使用
ArrayList
的行为感兴趣。根据你想要利用的scala特征来思考更有用。这里有一个很好的解释:


也就是说,您可能需要某种
索引eq

我可以想出3个更具体的问题来解决您的问题:

  • Scala的默认集合是什么
  • 什么Scala集合具有类似于
    ArrayList
    的特性
  • Scala中
    数组
    的好替代品是什么
以下是这些问题的答案:

Scala的默认集合是什么? Scala相当于Java的
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 只出现得更快。这里是元素——或者在