WalzoneInterview Prep
πŸ“ž Interviewing soon? Practice with a realistic AI mock phone interview β€” it calls you, then scores you. First 15 min FREE β†’

Java Collections Β· Guru Β· question 86 of 100

How do you implement a custom Set in Java Collections that supports efficient subset queries, and what are some use cases for doing so?

πŸ“• Buy this interview preparation book: 100 Java Collections questions & answers β€” PDF + EPUB for $5

To implement a custom Set in Java Collections that supports efficient subset queries, we can use the TreeSet class and provide a custom Comparator that orders elements based on their inclusion in subsets.

Here is an example implementation of a custom subset-aware Set class:

import java.util.Comparator;
import java.util.NavigableSet;
import java.util.TreeSet;

public class SubsetSet<T> {
    private final NavigableSet<T> set;

    public SubsetSet(Comparator<? super T> comparator) {
        set = new TreeSet<>(comparator);
    }

    public boolean add(T element) {
        return set.add(element);
    }

    public boolean contains(T element) {
        return set.contains(element);
    }

    public boolean remove(T element) {
        return set.remove(element);
    }

    public SubsetSet<T> subset(T fromElement, T toElement) {
        return new SubsetSet<>(new SubsetComparator<>(set.comparator(), fromElement, toElement));
    }

    private static class SubsetComparator<T> implements Comparator<T> {
        private final Comparator<? super T> comparator;
        private final T fromElement;
        private final T toElement;

        public SubsetComparator(Comparator<? super T> comparator, T fromElement, T toElement) {
            this.comparator = comparator;
            this.fromElement = fromElement;
            this.toElement = toElement;
        }

        @Override
        public int compare(T o1, T o2) {
            int cmp = comparator.compare(o1, o2);
            if (cmp == 0) {
                return 0;
            }
            if (fromElement != null \&\& comparator.compare(o1, fromElement) < 0) {
                return -1;
            }
            if (toElement != null \&\& comparator.compare(o1, toElement) >= 0) {
                return 1;
            }
            return cmp;
        }
    }
}

This implementation uses a TreeSet as its underlying data structure and provides a subset() method that returns a new SubsetSet instance with a custom subset-aware Comparator.

To create a SubsetSet instance, we provide a Comparator that orders elements based on their inclusion in subsets. The add(), contains(), and remove() methods work as expected for a Set.

The subset() method returns a new SubsetSet instance with a custom Comparator that orders elements based on their inclusion in the specified range. The SubsetComparator class used by the subset() method compares elements based on their natural ordering, unless a custom Comparator is provided.

Here is an example usage of the SubsetSet class:

SubsetSet<Integer> subsetSet = new SubsetSet<>(Integer::compare);
subsetSet.add(1);
subsetSet.add(2);
subsetSet.add(3);

SubsetSet<Integer> subSet = subsetSet.subset(2, 4);
System.out.println(subSet.contains(2)); // true
System.out.println(subSet.contains(3)); // false

In this example, we create a SubsetSet instance with an Integer comparator and add three elements to it. We then create a subset of this Set with elements that are greater than or equal to 2 and less than 4, and check if the subset contains the elements 2 and 3. The output of the program will be true and false, respectively.

Overall, a custom subset-aware Set class can be useful in situations where we need to efficiently query subsets of elements based on a certain criterion, such as range queries.

Reading is step one. Saying it out loud is the interview. Our AI interviewer calls your phone and runs a realistic Java Collections interview β€” then scores it.
πŸ“ž Practice Java Collections β€” free 15 min
πŸ“• Buy this interview preparation book: 100 Java Collections questions & answers β€” PDF + EPUB for $5

All 100 Java Collections questions Β· All topics