com.google.common.collect

## Class ImmutableRangeSet<C extends java.lang.Comparable>

- java.lang.Object
- - com.google.common.collect.ImmutableRangeSet<C>

- All Implemented Interfaces:
    RangeSet<C>, java.io.Serializable

      @Beta
      public final class ImmutableRangeSet<C extends java.lang.Comparable>
      extends java.lang.Object
      implements java.io.Serializable

  A `RangeSet` whose contents will never change, with many other important properties detailed at `ImmutableCollection`.
  Since:
    14.0
  See Also:
    Serialized Form

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `static class` | `ImmutableRangeSet.Builder<C extends java.lang.Comparable<?>>` A builder for immutable range sets.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `add(Range<C> range)` Adds the specified range to this `RangeSet` (optional operation).
    `void` | `addAll(RangeSet<C> other)` Adds all of the ranges from the specified range set to this range set (optional operation).
    `ImmutableSet<Range<C>>` | `asDescendingSetOfRanges()` Returns a descending view of the disconnected ranges that make up this range set.
    `ImmutableSet<Range<C>>` | `asRanges()` Returns a view of the disconnected ranges that make up this range set.
    `ImmutableSortedSet<C>` | `asSet(DiscreteDomain<C> domain)` Returns an `ImmutableSortedSet` containing the same values in the given domain contained by this range set.
    `static <C extends java.lang.Comparable<?>> ImmutableRangeSet.Builder<C>` | `builder()` Returns a new builder for an immutable range set.
    `void` | `clear()` Removes all ranges from this `RangeSet` (optional operation).
    `ImmutableRangeSet<C>` | `complement()` Returns a view of the complement of this `RangeSet`.
    `boolean` | `contains(C value)` Determines whether any of this range set's member ranges contains `value`.
    `static <C extends java.lang.Comparable> ImmutableRangeSet<C>` | `copyOf(RangeSet<C> rangeSet)` Returns an immutable copy of the specified `RangeSet`.
    `boolean` | `encloses(Range<C> otherRange)` Returns `true` if there exists a member range in this range set which encloses the specified range.
    `boolean` | `enclosesAll(RangeSet<C> other)` Returns `true` if for each member range in `other` there exists a member range in this range set which encloses it.
    `boolean` | `equals(java.lang.Object obj)` Returns `true` if `obj` is another `RangeSet` that contains the same ranges according to `Range.equals(Object)`.
    `int` | `hashCode()` Returns `asRanges().hashCode()`.
    `boolean` | `isEmpty()` Returns `true` if this range set contains no ranges.
    `static <C extends java.lang.Comparable> ImmutableRangeSet<C>` | `of()` Returns an empty immutable range set.
    `static <C extends java.lang.Comparable> ImmutableRangeSet<C>` | `of(Range<C> range)` Returns an immutable range set containing the specified single range.
    `Range<C>` | `rangeContaining(C value)` Returns the unique range from this range set that contains `value`, or `null` if this range set does not contain `value`.
    `void` | `remove(Range<C> range)` Removes the specified range from this `RangeSet` (optional operation).
    `void` | `removeAll(RangeSet<C> other)` Removes all of the ranges from the specified range set from this range set (optional operation).
    `Range<C>` | `span()` Returns the minimal range which encloses all ranges in this range set.
    `ImmutableRangeSet<C>` | `subRangeSet(Range<C> range)` Returns a view of the intersection of this range set with the given range.
    `java.lang.String` | `toString()` Returns a readable string representation of this range set.

    - ### Methods inherited from class java.lang.Object

      `clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

- - ### Method Detail

    - #### of

          public static <C extends java.lang.Comparable> ImmutableRangeSet<C> of()

      Returns an empty immutable range set.

    - #### of

          public static <C extends java.lang.Comparable> ImmutableRangeSet<C> of(Range<C> range)

      Returns an immutable range set containing the specified single range. If `range.isEmpty()`, this is equivalent to `of()`.

    - #### copyOf

          public static <C extends java.lang.Comparable> ImmutableRangeSet<C> copyOf(RangeSet<C> rangeSet)

      Returns an immutable copy of the specified `RangeSet`.

    - #### encloses

          public boolean encloses(Range<C> otherRange)

      Description copied from interface: `RangeSet`
      Returns `true` if there exists a member range in this range set which encloses the specified range.
      Specified by:
        `encloses` in interface `RangeSet<C extends java.lang.Comparable>`

    - #### rangeContaining

          public Range<C> rangeContaining(C value)

      Description copied from interface: `RangeSet`
      Returns the unique range from this range set that contains `value`, or `null` if this range set does not contain `value`.
      Specified by:
        `rangeContaining` in interface `RangeSet<C extends java.lang.Comparable>`

    - #### span

          public Range<C> span()

      Description copied from interface: `RangeSet`
      Returns the minimal range which encloses all ranges in this range set.
      Specified by:
        `span` in interface `RangeSet<C extends java.lang.Comparable>`

    - #### isEmpty

          public boolean isEmpty()

      Description copied from interface: `RangeSet`
      Returns `true` if this range set contains no ranges.
      Specified by:
        `isEmpty` in interface `RangeSet<C extends java.lang.Comparable>`

    - #### add

          public void add(Range<C> range)

      Description copied from interface: `RangeSet`
      Adds the specified range to this `RangeSet` (optional operation). That is, for equal range sets a and b, the result of `a.add(range)` is that `a` will be the minimal range set for which both `a.enclosesAll(b)` and `a.encloses(range)`.

      Note that `range` will be coalesced with any ranges in the range set that are connected with it. Moreover, if `range` is empty, this is a no-op.

      Specified by:
        `add` in interface `RangeSet<C extends java.lang.Comparable>`

    - #### addAll

          public void addAll(RangeSet<C> other)

      Description copied from interface: `RangeSet`
      Adds all of the ranges from the specified range set to this range set (optional operation). After this operation, this range set is the minimal range set that encloses both the original range set and `other`.

      This is equivalent to calling `RangeSet.add(com.google.common.collect.Range<C>)` on each of the ranges in `other` in turn.

      Specified by:
        `addAll` in interface `RangeSet<C extends java.lang.Comparable>`

    - #### remove

          public void remove(Range<C> range)

      Description copied from interface: `RangeSet`
      Removes the specified range from this `RangeSet` (optional operation). After this operation, if `range.contains(c)`, `this.contains(c)` will return `false`.

      If `range` is empty, this is a no-op.

      Specified by:
        `remove` in interface `RangeSet<C extends java.lang.Comparable>`

    - #### removeAll

          public void removeAll(RangeSet<C> other)

      Description copied from interface: `RangeSet`
      Removes all of the ranges from the specified range set from this range set (optional operation). After this operation, if `other.contains(c)`, `this.contains(c)` will return `false`.

      This is equivalent to calling `RangeSet.remove(com.google.common.collect.Range<C>)` on each of the ranges in `other` in turn.

      Specified by:
        `removeAll` in interface `RangeSet<C extends java.lang.Comparable>`

    - #### asRanges

          public ImmutableSet<Range<C>> asRanges()

      Description copied from interface: `RangeSet`
      Returns a view of the disconnected ranges that make up this range set. The returned set may be empty. The iterators returned by its `Iterable.iterator()` method return the ranges in increasing order of lower bound (equivalently, of upper bound).
      Specified by:
        `asRanges` in interface `RangeSet<C extends java.lang.Comparable>`

    - #### asDescendingSetOfRanges

          public ImmutableSet<Range<C>> asDescendingSetOfRanges()

      Description copied from interface: `RangeSet`
      Returns a descending view of the disconnected ranges that make up this range set. The returned set may be empty. The iterators returned by its `Iterable.iterator()` method return the ranges in decreasing order of lower bound (equivalently, of upper bound).
      Specified by:
        `asDescendingSetOfRanges` in interface `RangeSet<C extends java.lang.Comparable>`

    - #### complement

          public ImmutableRangeSet<C> complement()

      Description copied from interface: `RangeSet`
      Returns a view of the complement of this `RangeSet`.

      The returned view supports the `RangeSet.add(com.google.common.collect.Range<C>)` operation if this `RangeSet` supports `RangeSet.remove(com.google.common.collect.Range<C>)`, and vice versa.

      Specified by:
        `complement` in interface `RangeSet<C extends java.lang.Comparable>`

    - #### subRangeSet

          public ImmutableRangeSet<C> subRangeSet(Range<C> range)

      Returns a view of the intersection of this range set with the given range.
      Specified by:
        `subRangeSet` in interface `RangeSet<C extends java.lang.Comparable>`

    - #### asSet

          public ImmutableSortedSet<C> asSet(DiscreteDomain<C> domain)

      Returns an `ImmutableSortedSet` containing the same values in the given domain contained by this range set.

      Note: `a.asSet(d).equals(b.asSet(d))` does not imply `a.equals(b)`! For example, `a` and `b` could be `[2..4]` and `(1..5)`, or the empty ranges `[3..3)` and `[4..4)`.

      Warning: Be extremely careful what you do with the `asSet` view of a large range set (such as `ImmutableRangeSet.of(Range.greaterThan(0))`). Certain operations on such a set can be performed efficiently, but others (such as `Set.hashCode()` or `Collections.frequency(java.util.Collection<?>, java.lang.Object)`) can cause major performance problems.

      The returned set's `Object.toString()` method returns a short-hand form of the set's contents, such as `"[1..100]`"}.

      Throws:
        `java.lang.IllegalArgumentException` - if neither this range nor the domain has a lower bound, or if neither has an upper bound

    - #### builder

          public static <C extends java.lang.Comparable<?>> ImmutableRangeSet.Builder<C> builder()

      Returns a new builder for an immutable range set.

    - #### contains

          public boolean contains(C value)

      Description copied from interface: `RangeSet`
      Determines whether any of this range set's member ranges contains `value`.
      Specified by:
        `contains` in interface `RangeSet<C extends java.lang.Comparable>`

    - #### clear

          public void clear()

      Description copied from interface: `RangeSet`
      Removes all ranges from this `RangeSet` (optional operation). After this operation, `this.contains(c)` will return false for all `c`.

      This is equivalent to `remove(Range.all())`.

      Specified by:
        `clear` in interface `RangeSet<C extends java.lang.Comparable>`

    - #### enclosesAll

          public boolean enclosesAll(RangeSet<C> other)

      Description copied from interface: `RangeSet`
      Returns `true` if for each member range in `other` there exists a member range in this range set which encloses it. It follows that `this.contains(value)` whenever `other.contains(value)`. Returns `true` if `other` is empty.

      This is equivalent to checking if this range set `RangeSet.encloses(com.google.common.collect.Range<C>)` each of the ranges in `other`.

      Specified by:
        `enclosesAll` in interface `RangeSet<C extends java.lang.Comparable>`

    - #### equals

          public boolean equals(@Nullable
                       java.lang.Object obj)

      Description copied from interface: `RangeSet`
      Returns `true` if `obj` is another `RangeSet` that contains the same ranges according to `Range.equals(Object)`.
      Specified by:
        `equals` in interface `RangeSet<C extends java.lang.Comparable>`
      Overrides:
        `equals` in class `java.lang.Object`

    - #### hashCode

          public final int hashCode()

      Description copied from interface: `RangeSet`
      Returns `asRanges().hashCode()`.
      Specified by:
        `hashCode` in interface `RangeSet<C extends java.lang.Comparable>`
      Overrides:
        `hashCode` in class `java.lang.Object`

    - #### toString

          public final java.lang.String toString()

      Description copied from interface: `RangeSet`
      Returns a readable string representation of this range set. For example, if this `RangeSet` consisted of `Range.closed(1, 3)` and `Range.greaterThan(4)`, this might return `" [1‥3](4‥+∞)`"}.
      Specified by:
        `toString` in interface `RangeSet<C extends java.lang.Comparable>`
      Overrides:
        `toString` in class `java.lang.Object`