2

我需要以节省空间的方式在实现中存储大量Long值。SortedSet我正在考虑位集实现并发现了Javaewah。但是,API 需要int值而不是longs。

任何人都可以推荐任何替代方案或提出解决此问题的好方法吗?我主要关心空间效率。在构建集合时,我需要访问一次最小和最大元素。然而,访问时间并不是一个大问题(即完全运行长度编码的实现就可以了)。

编辑

我应该清楚,如果我可以访问集合的最小和最大元素,则实现不必实现接口。SortedSet

4

2 回答 2

1

不确定它是否具有 Set 或与常规 JCF 相比效率如何,但请看一下:

http://commons.apache.org/primitives/

于 2011-09-05T11:29:53.460 回答
1

您可以使用在下面使用 a 的 TLongArrayList long[]。它支持sort()所以最小值和最大值将是第一个和最后一个值。

或者您可以使用long[]带有长度的 a 并自己执行此操作。;)

这将比原始值本身多使用大约 64 个字节。如果您可以对 long 值的范围做出一些假设,您可以变得更紧凑。例如,如果它们实际上仅限于 48 位。

您可以考虑使用 LongBuffer。如果它是内存映射的,它会避免使用堆内存或直接内存,但您应该自己实现一个排序例程。


如果它们是聚集的,您可能能够将数据表示为一组范围。范围可以是纯 A - B,也可以是具有起始值的 BitSet。后者适用于电话号码。;)

于 2011-09-05T13:28:28.613 回答