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