在Scala中复制位集(或其他集合)的构造函数

在Scala中复制位集(或其他集合)的构造函数,scala,scala-collections,Scala,Scala Collections,我需要从另一个位集对象(输入)创建位集类的新实例 我期望类似于的新位集(输入),但没有找到。我可以用map()方法获得如下的新实例,但我认为这不是最好的解决方案 var r = input.map(_ + 0)(BitSet.canBuildFrom) 什么是位集的复制构造函数?Scala中复制构造函数的一般规则是什么?您可以使用第一个的位掩码创建另一个: var r = new BitSet(input.toBitMask) 可以使用第一个的位掩码创建另一个: var r = new Bi

我需要从另一个位集对象(输入)创建位集类的新实例

我期望类似于
的新位集(输入)
,但没有找到。我可以用map()方法获得如下的新实例,但我认为这不是最好的解决方案

var r = input.map(_ + 0)(BitSet.canBuildFrom)

什么是位集的复制构造函数?Scala中复制构造函数的一般规则是什么?

您可以使用第一个的位掩码创建另一个:

var r = new BitSet(input.toBitMask)

可以使用第一个的位掩码创建另一个:

var r = new BitSet(input.toBitMask)

我认为,一般规则是使用不可变集合。它们是不可变的,因此您可以自由地传递它们,而无需特别注意复制它们

但是,当您需要可变集合时,复制集合就变得非常有用。我发现使用标准的
方法是有效的:

scala> mutable.Set(1, 2, 3)
res0: scala.collection.mutable.Set[Int] = Set(1, 2, 3)

scala> res0.to[mutable.Set]
res1: scala.collection.mutable.Set[Int] = Set(1, 2, 3)

scala> res0 eq res1
res2: Boolean = false

但是,它不适用于
位集
,因为它不是泛型集合,
to
需要类型构造函数作为其泛型参数。对于
位集
,可以使用Lee建议的方法。顺便说一句,它完全是为scala.collection.mutable.BitSet设计的,因为scala.collection.immutable.BitSet
不包含这样的构造函数(也不需要它)。

我认为,一般规则是使用不可变的集合。它们是不可变的,因此您可以自由地传递它们,而无需特别注意复制它们

但是,当您需要可变集合时,复制集合就变得非常有用。我发现使用标准的
方法是有效的:

scala> mutable.Set(1, 2, 3)
res0: scala.collection.mutable.Set[Int] = Set(1, 2, 3)

scala> res0.to[mutable.Set]
res1: scala.collection.mutable.Set[Int] = Set(1, 2, 3)

scala> res0 eq res1
res2: Boolean = false
但是,它不适用于
位集
,因为它不是泛型集合,
to
需要类型构造函数作为其泛型参数。对于
位集
,可以使用Lee建议的方法。顺便说一句,它完全适用于
scala.collection.mutable.BitSet
,因为
scala.collection.immutable.BitSet
不包含此类构造函数(也不需要它)。

集合上的“copy”方法称为
clone
(与Java风格一致)

集合上的“复制”方法称为
clone
(与Java风格一致)