当我在代码下运行时,userList的大小为0.我希望它包含User类型的对象,因为我将在下面附加到它们。我没有正确地附加到List userList?
object SimilarityData {
val userList = List.empty[User]
case class User(id: String, nCoordinate : Int)
def getUsers(): List[User] =
{
userList :+
new User("1", 101010101) :+
new User("2", 111011101) :+
new User("3", 101010101) :+
new User("4", 101110101) :+
new User("5", 101110101) :+
new User("6", 101011101) :+
new User("7", 101010101) :+
new User("8", 101010101) :+
new User("9", 111000111);
userList
}
def main(args: Array[String]) {
println(userList.size)
}
}
答案 0 :(得分:5)
List
是面向前置的数据结构。附加到 O(n)的复杂性,而前置 - O(1) List
是一个不可变的数据结构,这就是为什么你不能修改现有值,但你可以根据它获得一个新值。考虑String
或Int
。考虑到上述情况,为了获得最佳效果,您应该将代码更新为以下内容:
def getUsers : List[User] =
new User("1", 101010101) +:
new User("2", 111011101) +:
new User("3", 101010101) +:
new User("4", 101110101) +:
new User("5", 101110101) +:
new User("6", 101011101) +:
new User("7", 101010101) +:
new User("8", 101010101) +:
new User("9", 111000111) +:
userList
答案 1 :(得分:3)
追加到不可变的List
会将元素追加到新的List
。由于userList
是不可变的,因此它始终是List.empty
,这是它所分配的。
要在追加用户之后获得userList
的大小,请返回使用附加创建的新List
以获得正确的大小。在Scala中,方法的最后一行是返回值。由于userList :+ ...
返回新的List
,这相当于将userList
分配给某个返回值并返回该值。
object SimilarityData {
val userList = List.empty[User]
case class User(id: String, nCoordinate : Int)
def getUsers(): List[User] =
{
userList :+
new User("1", 101010101) :+
new User("2", 111011101) :+
new User("3", 101010101) :+
new User("4", 101110101) :+
new User("5", 101110101) :+
new User("6", 101011101) :+
new User("7", 101010101) :+
new User("8", 101010101) :+
new User("9", 111000111);
}
def main(args: Array[String]) {
println(getUsers.size)
}
}
运行它:
scala> SimilarityData.main(Array[String]())
9