这很好地描述了这个问题:
scala> var l2 = List(1,2,3)
l2: List[Int] = List(1, 2, 3)
scala> l2(2) = 55
<console>:10: error: value update is not a member of List[Int]
l2(2) = 55
^
Run Code Online (Sandbox Code Playgroud)
Cal*_*lum 27
scala.List是不可变的,这意味着你无法在适当的位置更新它.如果要创建包含更新映射的List 副本,可以执行以下操作:
val updated = l2.updated( 2, 55 )
Run Code Online (Sandbox Code Playgroud)
还有可变的有序序列类型scala.collection.mutable,例如Buffer看起来更像你想要的类型.如果你尝试以下方法,你应该取得更大的成功:
scala> import scala.collection._
import scala.collection._
scala> val b = mutable.Buffer(1,2,3)
b: scala.collection.mutable.Buffer[Int] = ArrayBuffer(1, 2, 3)
scala> b(2) = 55
scala> b
res1: scala.collection.mutable.Buffer[Int] = ArrayBuffer(1, 2, 55)
Run Code Online (Sandbox Code Playgroud)
编辑:只是要注意,其他一些答案提到你应该使用"可变列表类型" - 这是真的,但Scala中的"List"只引用单链表,而在Java中它通常用于任何有序的,随机访问集合.还有一个DoubleLinkedList,更像是Java LinkedList,和a MutableList,它是一种用于其他类型内部的类型.
一般来说,Scala中您可能想要的是Buffer这项工作; 特别是因为默认实现是一个ArrayBuffer,与ArrayListJava中的大多数人的默认值非常接近.
但是,如果你想知道Java集合接口与Scala世界最接近的"映射"是什么,最简单的方法就是检查JavaConversions的作用.在这种情况下,您可以看到映射是Buffer:
scala.collection.mutable.Buffer <=> java.util.List
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21826 次 |
| 最近记录: |