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 
valueto the set.inherited - 
  addAll(
Iterable< E> elements) → void - 
  Adds all 
elementsto 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 
Rinstances.inherited - 
  clear(
) → void  - 
  Removes all elements from the set.
  inherited
 - 
  contains(
Object? value) → bool  - 
  Whether 
valueis 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 
actionon 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 
objectis 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 
valuefrom the set.inherited - 
  removeAll(
Iterable< Object?> elements) → void - 
  Removes each element of 
elementsfrom 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 
countelements.inherited - 
  skipWhile(
bool test(E value)) → Iterable< E>  - 
  Creates an 
Iterablethat skips leading elements whiletestis satisfied.inherited - 
  take(
int count) → Iterable< E>  - 
  Creates a lazy iterable of the 
countfirst 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 
indexin the iteration order. - 
  operator []=(
int index, E value) → void  - 
  Sets the element at the given 
indexin the set tovalue.