equals method
Compare two elements for being equal.
This should be a proper equality relation.
Implementation
@override
bool equals(Map<K, V>? map1, Map<K, V>? map2) => switch ((map1, map2)) {
(var m1, var m2) when identical(m1, m2) => true,
(null, _) || (_, null) => false,
(Map<K, V> m1, Map<K, V> m2) when m1.length != m2.length => false,
(Map<K, V> m1, Map<K, V> m2) => () {
final Map<_MapEntry, int> equalElementCounts =
HashMap<_MapEntry, int>();
// Count entries in first map
for (final K key in m1.keys) {
final _MapEntry entry = _MapEntry(this, key, m1[key]);
final int count = equalElementCounts[entry] ?? 0;
equalElementCounts[entry] = count + 1;
}
// Check entries in second map
for (final K key in m2.keys) {
final _MapEntry entry = _MapEntry(this, key, m2[key]);
final int? count = equalElementCounts[entry];
if (count == null || count == 0) return false;
equalElementCounts[entry] = count - 1;
}
return true;
}()
};