0

TIntSet从意义上来说是“排序集”,即它的元素具有自然顺序。

不幸的是,我找不到任何类似于first()and的方法last()

是否有可能以某种方式克服这种缺乏?

4

4 回答 4

3

fastutil比 Trove 好很多。有IntSortedSet接口firstInt()lastInt()方法。

于 2015-06-24T22:35:47.580 回答
2

TIntSet 未排序(它是一个哈希集),因此为了找到最小值或最大值,您需要迭代所有值。

于 2015-06-24T14:20:21.537 回答
0

为什么你认为这组是排序的?看起来不是。它没有从 JDK 集合框架中实现 SortedSet 或 NavigableSet 接口——那里没有这样的方法。

first() 和 last() 方法实际上继承自接口 SortedSet https://docs.oracle.com/javase/7/docs/api/java/util/SortedSet.html#first%28%29

于 2015-06-24T14:23:32.360 回答
0

如果您想要第一个/最后一个/单元格/地板等类型的选项,则需要基于树的集合,而 trove 没有类似的东西。如果你想扩展 TIntSet 来拥有这样的东西,那么

  • 一个简单的选项可以是在并行 int 数组中维护排序值,并使用它来服务第一个/最后一个类型的请求,但这将需要额外的内存。

  • 另一种选择是您可以只使用一个数组作为值,但保留已排序并使用二进制搜索来支持地图 API。与 trove 相比,get/put 的速度可能有点慢,但您可以节省内存,因为 trove 的负载因子为 0.5

所以你可以根据你想要的权衡做出决定。

于 2015-06-24T14:38:22.987 回答