我想知道以下代码段的效率是多少:
val lst = Source.fromFile(f).getLines.toList
发行时lst.contains(x)
,
这是否意味着f
正在重新扫描,还是搜索依赖于f
新创建列表中的内存内容?
提前致谢。
我想知道以下代码段的效率是多少:
val lst = Source.fromFile(f).getLines.toList
发行时lst.contains(x)
,
这是否意味着f
正在重新扫描,还是搜索依赖于f
新创建列表中的内存内容?
提前致谢。
搜索依赖于内存中的内容。并且它只加载一次toList
被调用。
如何更好地直接从源头上看。 Source.fromFile
返回一个scala.io.BufferedSource
。getLines
返回一个BufferedLineIterator。
它在 BufferedLineIterator 中,读取文件的内容。
override def hasNext = {
if (nextLine == null)
nextLine = lineReader.readLine
nextLine != null
}
override def next(): String = {
val result = {
if (nextLine == null) lineReader.readLine
else try nextLine finally nextLine = null
}
if (result == null) Iterator.empty.next
else result
}
}
调用toList
使用next
和hasNext
以上来派生列表。所以lst
已经包含了文件的所有元素。
Doinglst.contains(x)
像任何其他列表一样遍历列表。
使用 toList 后,它将返回不可变列表给您进行操作。您的文件将不会重新扫描您在列表中执行的操作