2011-09-05 65 views
2

我需要以空间有效的方式在SortedSet实现中存储大量的Long值。我正在考虑位集实现,并发现Javaewah。但是,API预计值为int而不是long压缩SortedSet <Long>实现

任何人都可以推荐任何替代品或建议一个很好的方法来解决这个问题?我主要关心空间效率。在构建集合时,我需要访问最小和最大元素一次。但是,访问时间并不是一个巨大的问题(即,一个完全运行长度编码的实现将会很好)。

编辑

我应该清楚的是,实施不必实现SortedSet接口提供我可以访问的最小和集合的最大元素。如果它已设置或

+0

您是否需要存储多头才能找到最小值和最大值? –

+0

是的,但我可以在创建时从集合中删除元素,因此我需要存储每个元素。 – Adamski

+0

什么是“大量的长期价值”? –

回答

1

你可以使用TLongArrayList它采用了long[]下方。它支持sort(),所以min和max将是第一个和最后一个值。

或者你可以使用长度为long[],你自己做。 ;)

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

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


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

+0

这个班级来自Trove。我不知道哪一个更有效率,Trove或Apache原语。 –

+0

就内存效率而言,任何差异都可能在于它如何增长阵列。即多长的[]将被闲置。 –