【问题标题】:Java: finding previous and next value of a navigable setJava:查找可导航集的上一个和下一个值
【发布时间】:2023-03-10 11:31:01
【问题描述】:

我现在有一个存储整数的可导航集,我如何从特定元素中找到上一个和下一个元素?如果可以找到这些元素,我不确定如何使用迭代器。

例子:

NavigableSet<Integer> values = new TreeSet<>(List.of(1, 2, 3, 4, 5));

假设给定3,我想获得2(上一个)或4(下一个)。

【问题讨论】:

    标签: java iterator set treeset


    【解决方案1】:

    更高和更低

    查看官方文档: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。即

    int result = values.lower(1);
    

    会因NullPointerException 而崩溃。如果您想先检查是否存在,请坚持使用 Integer 而不是 int

    还有更多方法可以做类似的事情,例如headSettailSet,之后您也可以将它们与迭代器结合使用。

    【讨论】:

      【解决方案2】:

      在一个NavigableSet 采取你可以使用floor 方法来获取“上一个”元素:

      返回此集合中小于或等于给定元素的最大元素,如果没有这样的元素,则返回 null。

      ceiling 获取“下一个”元素:

      返回此集合中大于或等于给定元素的最小元素,如果没有这样的元素,则返回 null。

      此解决方案可用于任何类型的对象。

      顺便说一句,您使用的整数总是大于或小于另一个整数,如果它们不等于,您可以使用higherlower

      (higher) 返回此集合中严格大于给定元素的最小元素,如果没有这样的元素,则返回 null。

      (lower) 返回此集合中严格小于给定元素的最大元素,如果没有这样的元素,则返回 null。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-11
        • 2018-12-16
        相关资源
        最近更新 更多