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:

  1. Iteration is as fast as a List (~2-3x faster than dart:collection).
  2. Removals are nearly as fast as HashSet (~300-400x faster).
  3. Creation is ~2x slower than HashSet, 5x faster than LinkedHashSet.

Tip

Profile your workload to be sure.

Implemented types
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 indexth 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 while test 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 to value.