IndexSet<E> class
abstract
final
Collections
A hash set where element iteration order is independent of their hash codes.
Iteration Order
The keys, E
, have a consistent order that is determined by the sequence
of add and remove calls (or similar operations):
final set = IndexSet<int>();
set.add(1);
set.add(2);
set.add(3);
set.remove(2);
print(set); // {1, 3}
Unlike LinkedHashSet, remove calls (and similar operations) shift the iteration order; a removed element is swapped with the last element in the set, and then removed:
final set = IndexSet<int>();
set.add(1);
set.add(2);
set.add(3);
set.remove(1);
print(set); // {3, 2}
Index Access
IndexSet provides an additional set of operators, operator[] and
operator[]=, to access elements by their order in the iteration sequence;
the index is zero-based and must be within bounds (0 <= index < length
):
final set = IndexSet<int>();
set.add(1);
set.add(2);
print(set[0]); // 1
print(set[1]); // 2
Performance
If you want the properties of IndexSet, or its strongest performance
characteristics fit your workload, it might be the fastest pure Dart Set
implementation available; for example package:sector
uses it internally
for its graph search algorithms.
IndexSet derives some performance facts from how it is constructed:
- Iteration is as fast as a List (~2-3x faster than
dart:collection
). - Removals are nearly as fast as HashSet (~300-400x faster).
- Creation is ~2x slower than HashSet, 5x faster than LinkedHashSet.
Tip
Profile your workload to be sure.
- Implemented types
-
- Set<
E>
- Set<
- Available Extensions
Constructors
- IndexSet({bool equals(E e1, E e2)?, int hashCode(E e)?, bool isValidKey(Object? potentialKey)?})
-
Creates an insertion-ordered indexing based Set.
factory
-
IndexSet.from(Iterable<
E> elements) -
Creates an IndexSet from
elements
.factory - IndexSet.identity()
-
Creates an IndexSet that uses identical and identityHashCode.
factory
Properties
- first → E
-
The first element.
no setterinherited
- hashCode → int
-
The hash code for this object.
no setterinherited
- isEmpty → bool
-
Whether this collection has no elements.
no setterinherited
- isNotEmpty → bool
-
Whether this collection has at least one element.
no setterinherited
-
iterator
→ Iterator<
E> -
An iterator that iterates over the elements of this set.
no setterinherited
- last → E
-
The last element.
no setterinherited
- length → int
-
The number of elements in this Iterable.
no setterinherited
- runtimeType → Type
-
A representation of the runtime type of the object.
no setterinherited
- single → E
-
Checks that this iterable has only one element, and returns that element.
no setterinherited
Methods
-
add(
E value) → bool -
Adds
value
to the set.inherited -
addAll(
Iterable< E> elements) → void -
Adds all
elements
to this set.inherited -
any(
bool test(E element)) → bool -
Checks whether any element of this iterable satisfies
test
.inherited -
cast<
R> () → Set< R> -
Provides a view of this set as a set of
R
instances.inherited -
clear(
) → void -
Removes all elements from the set.
inherited
-
contains(
Object? value) → bool -
Whether
value
is in the set.inherited -
containsAll(
Iterable< Object?> other) → bool -
Whether this set contains all the elements of
other
.inherited -
difference(
Set< Object?> other) → Set<E> -
Creates a new set with the elements of this that are not in
other
.inherited -
elementAt(
int index) → E -
Returns the
index
th element.inherited -
every(
bool test(E element)) → bool -
Checks whether every element of this iterable satisfies
test
.inherited -
expand<
T> (Iterable< T> toElements(E element)) → Iterable<T> -
Expands each element of this Iterable into zero or more elements.
inherited
-
firstWhere(
bool test(E element), {E orElse()?}) → E -
The first element that satisfies the given predicate
test
.inherited -
fold<
T> (T initialValue, T combine(T previousValue, E element)) → T -
Reduces a collection to a single value by iteratively combining each
element of the collection with an existing value
inherited
-
followedBy(
Iterable< E> other) → Iterable<E> -
Creates the lazy concatenation of this iterable and
other
.inherited -
forEach(
void action(E element)) → void -
Invokes
action
on each element of this iterable in iteration order.inherited -
intersection(
Set< Object?> other) → Set<E> -
Creates a new set which is the intersection between this set and
other
.inherited -
join(
[String separator = ""]) → String -
Converts each element to a String and concatenates the strings.
inherited
-
lastWhere(
bool test(E element), {E orElse()?}) → E -
The last element that satisfies the given predicate
test
.inherited -
lookup(
Object? object) → E? -
If an object equal to
object
is in the set, return it.inherited -
map<
T> (T toElement(E e)) → Iterable< T> -
The current elements of this iterable modified by
toElement
.inherited -
noSuchMethod(
Invocation invocation) → dynamic -
Invoked when a nonexistent method or property is accessed.
inherited
-
reduce(
E combine(E value, E element)) → E -
Reduces a collection to a single value by iteratively combining elements
of the collection using the provided function.
inherited
-
remove(
Object? value) → bool -
Removes
value
from the set.inherited -
removeAll(
Iterable< Object?> elements) → void -
Removes each element of
elements
from this set.inherited -
removeWhere(
bool test(E element)) → void -
Removes all elements of this set that satisfy
test
.inherited -
retainAll(
Iterable< Object?> elements) → void -
Removes all elements of this set that are not elements in
elements
.inherited -
retainWhere(
bool test(E element)) → void -
Removes all elements of this set that fail to satisfy
test
.inherited -
singleWhere(
bool test(E element), {E orElse()?}) → E -
The single element that satisfies
test
.inherited -
skip(
int count) → Iterable< E> -
Creates an Iterable that provides all but the first
count
elements.inherited -
skipWhile(
bool test(E value)) → Iterable< E> -
Creates an
Iterable
that skips leading elements whiletest
is satisfied.inherited -
take(
int count) → Iterable< E> -
Creates a lazy iterable of the
count
first elements of this iterable.inherited -
takeWhile(
bool test(E value)) → Iterable< E> -
Creates a lazy iterable of the leading elements satisfying
test
.inherited -
toList(
{bool growable = true}) → List< E> -
Creates a List containing the elements of this Iterable.
inherited
-
toSet(
) → Set< E> -
Creates a Set with the same elements and behavior as this
Set
.inherited -
toString(
) → String -
A string representation of this object.
inherited
-
union(
Set< E> other) → Set<E> -
Creates a new set which contains all the elements of this set and
other
.inherited -
where(
bool test(E element)) → Iterable< E> -
Creates a new lazy Iterable with all elements that satisfy the
predicate
test
.inherited -
whereType<
T> () → Iterable< T> -
Creates a new lazy Iterable with all elements that have type
T
.inherited
Operators
-
operator ==(
Object other) → bool -
The equality operator.
inherited
-
operator [](
int index) → E -
The key at the given
index
in the iteration order. -
operator []=(
int index, E value) → void -
Sets the element at the given
index
in the set tovalue
.