public class ObjectSet<T> extends Object implements Iterable<T>
This class performs fast contains and remove (typically O(1), worst case O(n) but that is rare in practice). Add may be slightly slower, depending on hash collisions. Hashcodes are rehashed to reduce collisions and the need to resize. Load factors greater than 0.91 greatly increase the chances to resize to the next higher POT size.
Unordered sets and maps are not designed to provide especially fast iteration. Iteration is faster with OrderedSet and OrderedMap.
This implementation uses linear probing with the backward shift algorithm for removal. Hashcodes are rehashed using Fibonacci hashing, instead of the more common power-of-two mask, to better distribute poor hashCodes (see Malte Skarupke's blog post). Linear probing continues to work even when all hashCodes collide, just more slowly.
Modifier and Type | Class and Description |
---|---|
static class |
ObjectSet.ObjectSetIterator<K> |
Modifier and Type | Field and Description |
---|---|
int |
size |
Constructor and Description |
---|
ObjectSet()
Creates a new set with an initial capacity of 51 and a load factor of 0.8.
|
ObjectSet(int initialCapacity)
Creates a new set with a load factor of 0.8.
|
ObjectSet(int initialCapacity,
float loadFactor)
Creates a new set with the specified initial capacity and load factor.
|
ObjectSet(ObjectSet<? extends T> set)
Creates a new set identical to the specified set.
|
Modifier and Type | Method and Description |
---|---|
boolean |
add(T key)
Returns true if the key was not already in the set.
|
void |
addAll(Array<? extends T> array) |
void |
addAll(Array<? extends T> array,
int offset,
int length) |
void |
addAll(ObjectSet<T> set) |
boolean |
addAll(T... array) |
boolean |
addAll(T[] array,
int offset,
int length) |
void |
clear()
Clears the set, leaving the backing arrays at the current capacity.
|
void |
clear(int maximumCapacity)
Clears the set and reduces the size of the backing arrays to be the specified capacity / loadFactor, if they are larger.
|
boolean |
contains(T key) |
void |
ensureCapacity(int additionalCapacity)
Increases the size of the backing array to accommodate the specified number of additional items / loadFactor.
|
boolean |
equals(Object obj) |
T |
first() |
T |
get(T key) |
int |
hashCode() |
boolean |
isEmpty()
Returns true if the set is empty.
|
ObjectSet.ObjectSetIterator<T> |
iterator()
Returns an iterator for the keys in the set.
|
boolean |
notEmpty()
Returns true if the set has one or more items.
|
boolean |
remove(T key)
Returns true if the key was removed.
|
void |
shrink(int maximumCapacity)
Reduces the size of the backing arrays to be the specified capacity / loadFactor, or less.
|
String |
toString() |
String |
toString(String separator) |
static <T> ObjectSet<T> |
with(T... array) |
forEach, spliterator
public ObjectSet()
public ObjectSet(int initialCapacity)
initialCapacity
- If not a power of two, it is increased to the next nearest power of two.public ObjectSet(int initialCapacity, float loadFactor)
initialCapacity
- If not a power of two, it is increased to the next nearest power of two.public boolean add(T key)
public boolean addAll(T... array)
public boolean addAll(T[] array, int offset, int length)
public boolean remove(T key)
public boolean notEmpty()
public boolean isEmpty()
public void shrink(int maximumCapacity)
public void clear(int maximumCapacity)
public void clear()
clear(int)
can be used to reduce the capacity.public boolean contains(T key)
public T first()
public void ensureCapacity(int additionalCapacity)
public ObjectSet.ObjectSetIterator<T> iterator()
If Collections.allocateIterators
is false, the same iterator instance is returned each time this method is called.
Use the ObjectSet.ObjectSetIterator
constructor for nested or multithreaded iteration.
public static <T> ObjectSet<T> with(T... array)
Copyright © 2020. All rights reserved.