我需要以节省空间的方式在Long
实现中存储大量SortedSet
值。我正在考虑比特集实现并发现Javaewah。但是,API需要int
值,而不是long
s。
任何人都可以推荐任何替代方案或建议一个解决此问题的好方法吗?我主要关注的是空间效率。构建集合后,我需要访问最小和最大元素一次。但是,访问时间并不是一个大问题(即完全运行长度编码的实现会很好)。
修改
我应该清楚,实现不必实现SortedSet
接口,前提是我可以访问集合的最小和最大元素。
答案 0 :(得分:1)
不确定它是否具有Set或与普通JCF相比的效率,但请看一下:
答案 1 :(得分:1)
您可以使用下面使用long[]
的TLongArrayList。它支持sort()
,因此min和max将是第一个和最后一个值。
或者您可以使用长度为long[]
并自行完成此操作。 ;)
这将比原始值本身使用大约64个字节。如果您可以对长值范围做出一些假设,则可以获得更紧凑的结果。例如如果他们实际上限制在48位。
您可以考虑使用LongBuffer。如果它是内存映射的,它可以避免使用堆或直接内存,但你可以自己实现一个排序例程。
如果它们是群集的,您可以将数据表示为一组范围。范围可以是纯A - B,也可以是具有起始值的BitSet。后者适用于电话号码。 ;)