我试图添加并反对一个列表而不仅仅是一个数字,所以当你回答一个例子,如果你可以使用像我的二手车的例子或水果或我一直在寻找的所有地方和我看到的所有例子的对象只是在列表中添加数字.
我试图将一些java代码转换为scala java代码即时转换有问题
ArrayList usedCarList = new ArrayList();
UsedCars usedCar = new UsedCars();
usedCarList.add(usedCar);
Run Code Online (Sandbox Code Playgroud)
现在我看了几个例子,但是一旦我开始尝试使用对象,它们似乎不起作用
var b = List[Int]();
b ::= 1;
b ::= 2;
b ::= 3;
Run Code Online (Sandbox Code Playgroud)
我尝试了下面列出的一些东西1.
var usedCarList = List();
def addCar (usedCarList: List[UsedCars]){
var usedCar = new UsedCars();
series of set operations on the usedCar
usedCar :: usedCarList;
println(usedCarList.length);
}
Run Code Online (Sandbox Code Playgroud)
当我检查列表的大小时,它总是空的
有可变scala.collection.mutable.MutableList列表(例如)和不可变列表(scala.collection.immutable.List)。您正在使用的是不可变列表,因此仅通过调用::一个元素实际上会返回一个具有添加元素的新实例,但不会更改基础值。您必须将a var与不可变列表结合使用,或者使用可变的像这样的列表:
scala> import scala.collection._
import scala.collection._
scala> val list = mutable.MutableList[UsedCars]()
list: scala.collection.mutable.MutableList[UsedCars] = MutableList()
scala> list += new UsedCars()
res0: list.type = MutableList(UsedCars@4bfa79c8)
scala> list.size
res1: Int = 1
Run Code Online (Sandbox Code Playgroud)
有关为不可变列表重新分配参考的信息,请参见su-的答案。
Scala List和Java 之间存在根本区别ArrayList:Scala List是不可变的.
不仅仅是只读 - Java中的只读集合仍然可以由创建它的人改变.在Scala中,任何人List都无法更改.
现在,让我们通过你展示"工作"的例子来调和:b ::= 1.该示例相当于b = 1 :: b,因此它不会更改列表.相反,它正在创建一个新列表,并将其分配给b.这可能听起来效率低下,但它实际上非常快,因为它List是一个持久的数据结构(查看更多信息).
因此,对您的问题最明显的答案是使用不同类型的数据结构.斯卡拉最接近的ArrayList是ArrayBuffer.
但是,还有另一种可能性.而不是更改列表并且不返回任何内容,返回新列表.这可能需要对代码结构进行其他更改,因为没有关于它的细节,我不会推测它们可能是什么.
| 归档时间: |
|
| 查看次数: |
12243 次 |
| 最近记录: |