tailSet method available in SortedSet is one of the lesser known/used methods I recently got to use. It returns the set of elements which are greater than or equal to the element passed in the parameter. As the official doc says the returned set is backed by our original set.

Here’s an example,

import java.util.Arrays;
import java.util.TreeSet;

public class TailsetDemo {

    public static void main(String[] args) {
        // elements will be ordered using natural ordering
        TreeSet<Integer> treeSet = new TreeSet<>(Arrays.asList(10, 2, 5, 3, 7, 11));
        treeSet.tailSet(9).forEach(System.out::println); // prints 10 and 11
    }
}

It in came handy while solving the leetcode challenge: 933. Number of Recent Calls. I used TreeSet which is an implementation of SortedSet. The overall time complexity of the solution is O(logN).

import java.util.TreeSet;

public class RecentCounter {

    private final TreeSet<Integer> set;

    public RecentCounter() {
        this.set = new TreeSet<>();
    }

    public int ping(int t) {
        set.add(t); // O(logN)
        return set.tailSet(t - 3000).size(); // O(logN)
    }

    public static void main(String[] args) {
        RecentCounter recentCounter = new RecentCounter();
        System.out.println(recentCounter.ping(1));     // requests = [1], range is [-2999,1], return 1
        System.out.println(recentCounter.ping(100));   // requests = [1, 100], range is [-2900,100], return 2
        System.out.println(recentCounter.ping(3001));  // requests = [1, 100, 3001], range is [1,3001], return 3
        System.out.println(recentCounter.ping(3002));  // requests = [1, 100, 3001, 3002], range is [2,3002], return 3

    }
}