为了账号安全,请及时绑定邮箱和手机立即绑定

Scala中Array和List的区别

Scala中Array和List的区别

莫回无 2019-03-07 15:06:06
Scala中Array和List的区别
查看完整描述

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.

查看完整回答
反对 回复 2019-03-16
?
千巷猫影

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

查看完整回答
反对 回复 2019-03-16
?
慕标琳琳

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的父代,这是当代码的并行性无关紧要的合适的泛化。它们都是相对新引入的,因此人们不会使用它们。

查看完整回答
反对 回复 2019-03-16
  • 3 回答
  • 0 关注
  • 5117 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信