Class ImmutableSet<E>
- java.lang.Object
-
- java.util.AbstractCollection<E>
-
- com.google.common.collect.ImmutableCollection<E>
-
- com.google.common.collect.ImmutableSet<E>
-
- All Implemented Interfaces:
java.io.Serializable
,java.lang.Iterable<E>
,java.util.Collection<E>
,java.util.Set<E>
- Direct Known Subclasses:
ImmutableEnumSet
,ImmutableSet.CachingAsList
,ImmutableSetMultimap.EntrySet
,SingletonImmutableSet
public abstract class ImmutableSet<E> extends ImmutableCollection<E> implements java.util.Set<E>
ASet
whose contents will never change, with many other important properties detailed atImmutableCollection
.- Since:
- 2.0
- See Also:
- Serialized Form
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
ImmutableSet.Builder<E>
A builder for creatingImmutableSet
instances.(package private) static class
ImmutableSet.CachingAsList<E>
private static class
ImmutableSet.EmptySetBuilderImpl<E>
(package private) static class
ImmutableSet.Indexed<E>
private static class
ImmutableSet.JdkBackedSetBuilderImpl<E>
SetBuilderImpl version that uses a JDK HashSet, which has built in hash flooding protection.private static class
ImmutableSet.RegularSetBuilderImpl<E>
Default implementation of the guts of ImmutableSet.Builder, creating an open-addressed hash table and deduplicating elements as they come, so it only allocates O(max(distinct, expectedCapacity)) rather than O(calls to add).private static class
ImmutableSet.SerializedForm
private static class
ImmutableSet.SetBuilderImpl<E>
Swappable internal implementation of an ImmutableSet.Builder.
-
Field Summary
Fields Modifier and Type Field Description private static int
CUTOFF
private static double
DESIRED_LOAD_FACTOR
(package private) static int
MAX_TABLE_SIZE
(package private) static int
SPLITERATOR_CHARACTERISTICS
-
Constructor Summary
Constructors Constructor Description ImmutableSet()
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description static <E> ImmutableSet.Builder<E>
builder()
Returns a new builder.static <E> ImmutableSet.Builder<E>
builderWithExpectedSize(int expectedSize)
Returns a new builder, expecting the specified number of distinct elements to be added.(package private) static int
chooseTableSize(int setSize)
Returns an array size suitable for the backing array of a hash table that uses open addressing with linear probing in its implementation.private static <E> ImmutableSet<E>
construct(int n, int expectedSize, java.lang.Object... elements)
Constructs anImmutableSet
from the firstn
elements of the specified array.private static <E> ImmutableSet<E>
constructUnknownDuplication(int n, java.lang.Object... elements)
Constructs anImmutableSet
from the firstn
elements of the specified array, which we have no particular reason to believe does or does not contain duplicates.static <E> ImmutableSet<E>
copyOf(E[] elements)
Returns an immutable set containing each ofelements
, minus duplicates, in the order each appears first in the source array.static <E> ImmutableSet<E>
copyOf(java.lang.Iterable<? extends E> elements)
Returns an immutable set containing each ofelements
, minus duplicates, in the order each appears first in the source iterable.static <E> ImmutableSet<E>
copyOf(java.util.Collection<? extends E> elements)
Returns an immutable set containing each ofelements
, minus duplicates, in the order each appears first in the source collection.static <E> ImmutableSet<E>
copyOf(java.util.Iterator<? extends E> elements)
Returns an immutable set containing each ofelements
, minus duplicates, in the order each appears first in the source iterator.private static ImmutableSet
copyOfEnumSet(java.util.EnumSet enumSet)
boolean
equals(java.lang.Object object)
int
hashCode()
(package private) boolean
isHashCodeFast()
Returnstrue
if thehashCode()
method runs quickly.abstract UnmodifiableIterator<E>
iterator()
Returns an unmodifiable iterator across the elements in this collection.static <E> ImmutableSet<E>
of()
Returns the empty immutable set.static <E> ImmutableSet<E>
of(E element)
Returns an immutable set containingelement
.static <E> ImmutableSet<E>
of(E e1, E e2)
Returns an immutable set containing the given elements, minus duplicates, in the order each was first specified.static <E> ImmutableSet<E>
of(E e1, E e2, E e3)
Returns an immutable set containing the given elements, minus duplicates, in the order each was first specified.static <E> ImmutableSet<E>
of(E e1, E e2, E e3, E e4)
Returns an immutable set containing the given elements, minus duplicates, in the order each was first specified.static <E> ImmutableSet<E>
of(E e1, E e2, E e3, E e4, E e5)
Returns an immutable set containing the given elements, minus duplicates, in the order each was first specified.static <E> ImmutableSet<E>
of(E e1, E e2, E e3, E e4, E e5, E e6, E... others)
Returns an immutable set containing the given elements, minus duplicates, in the order each was first specified.static <E> java.util.stream.Collector<E,?,ImmutableSet<E>>
toImmutableSet()
Returns aCollector
that accumulates the input elements into a newImmutableSet
.(package private) java.lang.Object
writeReplace()
-
Methods inherited from class com.google.common.collect.ImmutableCollection
add, addAll, asList, clear, contains, copyIntoArray, internalArray, internalArrayEnd, internalArrayStart, isPartialView, remove, removeAll, removeIf, retainAll, spliterator, toArray, toArray
-
-
-
-
Field Detail
-
SPLITERATOR_CHARACTERISTICS
static final int SPLITERATOR_CHARACTERISTICS
- See Also:
- Constant Field Values
-
MAX_TABLE_SIZE
static final int MAX_TABLE_SIZE
- See Also:
- Constant Field Values
-
DESIRED_LOAD_FACTOR
private static final double DESIRED_LOAD_FACTOR
- See Also:
- Constant Field Values
-
CUTOFF
private static final int CUTOFF
- See Also:
- Constant Field Values
-
-
Method Detail
-
toImmutableSet
public static <E> java.util.stream.Collector<E,?,ImmutableSet<E>> toImmutableSet()
Returns aCollector
that accumulates the input elements into a newImmutableSet
. Elements appear in the resulting set in the encounter order of the stream; if the stream contains duplicates (according toObject.equals(Object)
), only the first duplicate in encounter order will appear in the result.- Since:
- 21.0
-
of
public static <E> ImmutableSet<E> of()
Returns the empty immutable set. Preferred overCollections.emptySet()
for code consistency, and because the return type conveys the immutability guarantee.Performance note: the instance returned is a singleton.
-
of
public static <E> ImmutableSet<E> of(E element)
Returns an immutable set containingelement
. Preferred overCollections.singleton(T)
for code consistency,null
rejection, and because the return type conveys the immutability guarantee.
-
of
public static <E> ImmutableSet<E> of(E e1, E e2)
Returns an immutable set containing the given elements, minus duplicates, in the order each was first specified. That is, if multiple elements are equal, all except the first are ignored.
-
of
public static <E> ImmutableSet<E> of(E e1, E e2, E e3)
Returns an immutable set containing the given elements, minus duplicates, in the order each was first specified. That is, if multiple elements are equal, all except the first are ignored.
-
of
public static <E> ImmutableSet<E> of(E e1, E e2, E e3, E e4)
Returns an immutable set containing the given elements, minus duplicates, in the order each was first specified. That is, if multiple elements are equal, all except the first are ignored.
-
of
public static <E> ImmutableSet<E> of(E e1, E e2, E e3, E e4, E e5)
Returns an immutable set containing the given elements, minus duplicates, in the order each was first specified. That is, if multiple elements are equal, all except the first are ignored.
-
of
@SafeVarargs public static <E> ImmutableSet<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E... others)
Returns an immutable set containing the given elements, minus duplicates, in the order each was first specified. That is, if multiple elements are equal, all except the first are ignored.The array
others
must not be longer thanInteger.MAX_VALUE - 6
.- Since:
- 3.0 (source-compatible since 2.0)
-
constructUnknownDuplication
private static <E> ImmutableSet<E> constructUnknownDuplication(int n, java.lang.Object... elements)
Constructs anImmutableSet
from the firstn
elements of the specified array, which we have no particular reason to believe does or does not contain duplicates. Ifk
is the size of the returnedImmutableSet
, then the unique elements ofelements
will be in the firstk
positions, andelements[i] == null
fork <= i < n
.This may modify
elements
. Additionally, ifn == elements.length
andelements
contains no duplicates,elements
may be used without copying in the returnedImmutableSet
, in which case the caller must not modify it.elements
may contain only values of typeE
.- Throws:
java.lang.NullPointerException
- if any of the firstn
elements ofelements
is null
-
construct
private static <E> ImmutableSet<E> construct(int n, int expectedSize, java.lang.Object... elements)
Constructs anImmutableSet
from the firstn
elements of the specified array. Ifk
is the size of the returnedImmutableSet
, then the unique elements ofelements
will be in the firstk
positions, andelements[i] == null
fork <= i < n
.This may modify
elements
. Additionally, ifn == elements.length
andelements
contains no duplicates,elements
may be used without copying in the returnedImmutableSet
, in which case it may no longer be modified.elements
may contain only values of typeE
.- Throws:
java.lang.NullPointerException
- if any of the firstn
elements ofelements
is null
-
copyOf
public static <E> ImmutableSet<E> copyOf(java.util.Collection<? extends E> elements)
Returns an immutable set containing each ofelements
, minus duplicates, in the order each appears first in the source collection.Performance note: This method will sometimes recognize that the actual copy operation is unnecessary; for example,
copyOf(copyOf(anArrayList))
will copy the data only once. This reduces the expense of habitually making defensive copies at API boundaries. However, the precise conditions for skipping the copy operation are undefined.- Throws:
java.lang.NullPointerException
- if any ofelements
is null- Since:
- 7.0 (source-compatible since 2.0)
-
copyOf
public static <E> ImmutableSet<E> copyOf(java.lang.Iterable<? extends E> elements)
Returns an immutable set containing each ofelements
, minus duplicates, in the order each appears first in the source iterable. This method iterates overelements
only once.Performance note: This method will sometimes recognize that the actual copy operation is unnecessary; for example,
copyOf(copyOf(anArrayList))
should copy the data only once. This reduces the expense of habitually making defensive copies at API boundaries. However, the precise conditions for skipping the copy operation are undefined.- Throws:
java.lang.NullPointerException
- if any ofelements
is null
-
copyOf
public static <E> ImmutableSet<E> copyOf(java.util.Iterator<? extends E> elements)
Returns an immutable set containing each ofelements
, minus duplicates, in the order each appears first in the source iterator.- Throws:
java.lang.NullPointerException
- if any ofelements
is null
-
copyOf
public static <E> ImmutableSet<E> copyOf(E[] elements)
Returns an immutable set containing each ofelements
, minus duplicates, in the order each appears first in the source array.- Throws:
java.lang.NullPointerException
- if any ofelements
is null- Since:
- 3.0
-
copyOfEnumSet
private static ImmutableSet copyOfEnumSet(java.util.EnumSet enumSet)
-
isHashCodeFast
boolean isHashCodeFast()
Returnstrue
if thehashCode()
method runs quickly.
-
equals
public boolean equals(@CheckForNull java.lang.Object object)
-
hashCode
public int hashCode()
-
iterator
public abstract UnmodifiableIterator<E> iterator()
Description copied from class:ImmutableCollection
Returns an unmodifiable iterator across the elements in this collection.
-
writeReplace
java.lang.Object writeReplace()
- Overrides:
writeReplace
in classImmutableCollection<E>
-
builder
public static <E> ImmutableSet.Builder<E> builder()
Returns a new builder. The generated builder is equivalent to the builder created by theImmutableSet.Builder
constructor.
-
builderWithExpectedSize
public static <E> ImmutableSet.Builder<E> builderWithExpectedSize(int expectedSize)
Returns a new builder, expecting the specified number of distinct elements to be added.If
expectedSize
is exactly the number of distinct elements added to the builder beforeImmutableSet.Builder.build()
is called, the builder is likely to perform better than an unsizedbuilder()
would have.It is not specified if any performance benefits apply if
expectedSize
is close to, but not exactly, the number of distinct elements added to the builder.- Since:
- 23.1
-
chooseTableSize
static int chooseTableSize(int setSize)
Returns an array size suitable for the backing array of a hash table that uses open addressing with linear probing in its implementation. The returned size is the smallest power of two that can hold setSize elements with the desired load factor. Always returns at least setSize + 2.
-
-