TIntSet
从意义上来说是“排序集”,即它的元素具有自然顺序。
不幸的是,我找不到任何类似于first()
and的方法last()
。
是否有可能以某种方式克服这种缺乏?
fastutil比 Trove 好很多。有IntSortedSet
接口firstInt()
和lastInt()
方法。
TIntSet 未排序(它是一个哈希集),因此为了找到最小值或最大值,您需要迭代所有值。
为什么你认为这组是排序的?看起来不是。它没有从 JDK 集合框架中实现 SortedSet 或 NavigableSet 接口——那里没有这样的方法。
first() 和 last() 方法实际上继承自接口 SortedSet https://docs.oracle.com/javase/7/docs/api/java/util/SortedSet.html#first%28%29
如果您想要第一个/最后一个/单元格/地板等类型的选项,则需要基于树的集合,而 trove 没有类似的东西。如果你想扩展 TIntSet 来拥有这样的东西,那么
一个简单的选项可以是在并行 int 数组中维护排序值,并使用它来服务第一个/最后一个类型的请求,但这将需要额外的内存。
另一种选择是您可以只使用一个数组作为值,但保留已排序并使用二进制搜索来支持地图 API。与 trove 相比,get/put 的速度可能有点慢,但您可以节省内存,因为 trove 的负载因子为 0.5
所以你可以根据你想要的权衡做出决定。