equals method

  1. @override
bool equals(
  1. Map<K, V>? map1,
  2. Map<K, V>? map2
)
override

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;
        }()
    };