HashSet constructor - HashSet - dart:collection library (original) (raw)
HashSet<E>({
Create a hash set using the provided equals
as equality.
The provided equals
must define a stable equivalence relation, andhashCode
must be consistent with equals
.
If equals
or hashCode
are omitted, the set uses the elements' intrinsic Object.== and Object.hashCode.
If you supply one of equals
and hashCode
, you should generally also supply the other.
Some equals
or hashCode
functions might not work for all objects. If isValidKey
is supplied, it's used to check a potential element which is not necessarily an instance of E
, like the argument tocontains which is typed as Object?
. If isValidKey
returns false
, for an object, the equals
andhashCode
functions are not called, and no key equal to that object is assumed to be in the map. The isValidKey
function defaults to just testing if the object is an instance of E
, which means that:
HashSet<int>(equals: (int e1, int e2) => (e1 - e2) % 5 == 0,
hashCode: (int e) => e % 5)
does not need an isValidKey
argument because it defaults to only accepting int
values which are accepted by both equals
and hashCode
.
If neither equals
, hashCode
, nor isValidKey
is provided, the default isValidKey
instead accepts all values. The default equality and hashcode operations are assumed to work on all objects.
Likewise, if equals
is identical, hashCode
is identityHashCodeand isValidKey
is omitted, the resulting set is identity based, and the isValidKey
defaults to accepting all keys. Such a map can be created directly using HashSet.identity.
Implementation
external factory HashSet({
bool Function(E, E)? equals,
int Function(E)? hashCode,
bool Function(dynamic)? isValidKey,
});