我有一个大型数据集,而rowId是Long类型。 它需要指出一行是否在某个特殊集合中。
我发现BitSet对内存和网络传输更有效,但不幸的是BitSet可以容纳的最大值是Int。
还有其他方法吗? (使用boolean []?)
由于
答案 0 :(得分:2)
BitSet
的性质使它们可以轻松地分解和合并,以便根据您要完全实现的目标轻松实现网络传输。
你可以随时建立自己的:
object BitSet extends BitSetFactory[BitSet] {
val empty: BitSet = immutable.BitSet.empty
def newBuilder = immutable.BitSet.newBuilder
implicit def canBuildFrom: CanBuildFrom[BitSet, Long, BitSet] = bitsetCanBuildFrom
}
trait BitSetFactory[Coll <: BitSet with BitSetLike[Coll]] {
def empty: Coll
def newBuilder: Builder[Long, Coll]
def apply(elems: Long*): Coll = (empty /: elems) (_ + _)
def bitsetCanBuildFrom = new CanBuildFrom[Coll, Long, Coll] {
def apply(from: Coll) = newBuilder
def apply() = newBuilder
}
}
trait BitSetLike[+This <: BitSetLike[This] with SortedSet[Long]] extends SortedSetLike[Long, This] { self =>
等...