Scala收集标准实践
来自背景,我习惯了处理集合的常见做法:显然会有例外,但通常代码看起来像这样:Java
public class MyClass {
private Set<String> mySet;
public void init() {
Set<String> s = new LinkedHashSet<String>();
s.add("Hello");
s.add("World");
mySet = Collections.unmodifiableSet(s);
}
}
我必须承认,我对Scala中过多的选项感到有些困惑。有:
-
scala.List
(和Seq
) -
scala.collections.Set
(和Map
) -
scala.collection.immutable.Set
(和 ,但不是Map
Stack
List
) -
scala.collection.mutable.Set
(和 ,但不是Map
Buffer
List
) scala.collection.jcl
所以问题!
- 为什么 在包中定义 和 不定义(即使 的实现在集合子包中)?
List
Seq
scala
scala.collection
Seq
- 初始化集合然后冻结它的标准机制是什么(在Java中是通过包装在)中实现的?
unmodifiable
- 为什么某些集合类型(例如 )仅定义为可变的?(没有不可变的)?
MultiMap
MultiMap
我读过丹尼尔·斯皮瓦克(Daniel Spiewak)关于斯卡拉系列的优秀系列,但仍然对如何在实践中实际使用它们感到困惑。由于强制执行的完整包声明,以下内容似乎有点笨拙:
class MyScala {
var mySet: scala.collection.Set[String] = null
def init(): Unit = {
val s = scala.collection.mutable.Set.empty[String]
s + "Hello"
s + "World"
mySet = scala.collection.immutable.Set(s : _ *)
}
}
尽管可以说这比Java版本更正确,因为不可变集合不能更改(例如在Java情况下,底层集合可以在包装器下方进行更改)unmodifiable