我现在有一个可导航的集合来存储整数,如何从特定元素中找到上一个和下一个元素?如果您可以找到这些元素,我不确定如何使用迭代器。
例子:
NavigableSet<Integer> values = new TreeSet<>(List.of(1, 2, 3, 4, 5));
让我们说,鉴于3
,我想接触2
(上一个)或4
(下一个)。
查看官方文档:NavigableSet
有方法
higher
: 返回这个集合中严格大于给定元素的最小元素,或者null
如果没有这样的元素。lower
: 返回这个集合中严格小于给定元素的最大元素,或者null
如果没有这样的元素。例子:
TreeSet<Integer> values = new TreeSet<>(List.of(1, 2, 4));
// 3 is not contained
int lower1 = values.lower(3); // 2
int higher1 = values.higher(3); // 4
// 2 is contained
int lower2 = values.lower(2); // 1
int higher2 = values.higher(2); // 4
如果您不是在寻找严格的更大或更小,也有
ceiling
: 返回此集合中大于或等于给定元素的最小元素,或者null
如果没有这样的元素。floor
: 返回这个集合中小于或等于给定元素的最大元素,或者null
如果没有这样的元素。例子:
TreeSet<Integer> values = new TreeSet<>(List.of(1, 2, 4));
// 3 is not contained
int lower1 = values.floor(3); // 2
int higher1 = values.ceiling(3); // 4
// 2 is contained
int lower2 = values.floor(2); // 2
int higher2 = values.ceiling(2); // 2
null
如果没有这样的元素,请小心返回的方法。特别是如果您自动拆箱到int
. IE
int result = values.lower(1);
将与NullPointerException
. 如果您想首先检查是否存在,请坚持Integer
而不是int
。
还有更多的方法可以做类似的事情,比如headSet
or tailSet
,之后你也可以将它们与迭代器结合起来。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句