在scala中添加一个对象列表

时间:2013-04-01 19:56:53

标签: scala

我正在尝试添加和反对列表而不仅仅是一个数字,所以当你回复一个例子,如果你可以使用像我的二手车例子或水果之类的东西 我一直在寻找每个地方,我看到的所有例子都只是在列表中添加数字 我试图将一些Java代码转换为scala 转换有问题的java代码是

ArrayList usedCarList = new ArrayList();
UsedCars usedCar = new UsedCars();
usedCarList.add(usedCar);

现在我看了几个例子,但是一旦我开始尝试使用对象,它们似乎不起作用,即

var b = List[Int](); 
b ::= 1; 
b ::= 2; 
b ::= 3; 

我已经尝试了下面列出的一些事项。

var usedCarList = List();
def addCar (usedCarList: List[UsedCars]){
var usedCar = new UsedCars();
series of set operations on the usedCar
usedCar :: usedCarList;
println(usedCarList.length);
}

当我检查列表的大小时,它总是空的

2 个答案:

答案 0 :(得分:5)

有可变的(例如scala.collection.mutable.MutableList)和不可变的列表(scala.collection.immutable.List)。您使用的是不可变列表,因此只需在元素上调用::实际上返回带有添加元素的新实例,但不会更改基础值。您必须使用带有不可变列表的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

请参阅su的答案,用不可变列表重新分配引用。

答案 1 :(得分:5)

Scala的List和Java的ArrayList之间存在根本区别:Scala的List是不可变的。

不仅仅是只读 - Java中的只读集合仍然可以由创建它的人改变。在Scala中,任何人都无法更改List

现在,让我们通过您展示“有效”的示例来协调:b ::= 1。该示例等同于b = 1 :: b,因此不会更改列表。相反,它正在创建列表,并将其分配给b。这可能听起来效率低下,但它实际上非常快,因为List是一个持久的数据结构(查看更多信息)。

因此,对您的问题最明显的答案是使用不同类型的数据结构。 Scala最接近ArrayList的是ArrayBuffer

但是,还有另一种可能性。而不是更改列表并且不返回任何内容,返回新列表。这可能需要对代码结构进行其他更改,因为没有关于它的细节,我不会推测它们可能是什么。