@@ -325,19 +325,16 @@ class MapEquality<K, V> implements Equality<Map<K, V>> {
325
325
var length = map1.length;
326
326
if (length != map2.length) return false ;
327
327
Map <_MapEntry , int > equalElementCounts = HashMap ();
328
- var values1 = map1.values.iterator;
329
328
for (var key in map1.keys) {
330
- var value = (values1.. moveNext ()).current ;
331
- var entry = _MapEntry ( this , key, value) ;
332
- equalElementCounts. update ( entry, _addOne, ifAbsent : _one) ;
329
+ var entry = _MapEntry ( this , key, map1[key]) ;
330
+ var count = equalElementCounts[entry] ?? 0 ;
331
+ equalElementCounts[ entry] = count + 1 ;
333
332
}
334
- final values2 = map2.values.iterator;
335
333
for (var key in map2.keys) {
336
- var value = (values2..moveNext ()).current;
337
- var entry = _MapEntry (this , key, value);
338
- var count = equalElementCounts.update (entry, _subtractOne,
339
- ifAbsent: _negativeOne);
340
- if (count < 0 ) return false ;
334
+ var entry = _MapEntry (this , key, map2[key]);
335
+ var count = equalElementCounts[entry];
336
+ if (count == null || count == 0 ) return false ;
337
+ equalElementCounts[entry] = count - 1 ;
341
338
}
342
339
return true ;
343
340
}
@@ -346,11 +343,9 @@ class MapEquality<K, V> implements Equality<Map<K, V>> {
346
343
int hash (Map <K , V >? map) {
347
344
if (map == null ) return null .hashCode;
348
345
var hash = 0 ;
349
- var values = map.values.iterator;
350
346
for (var key in map.keys) {
351
- var value = (values..moveNext ()).current;
352
347
var keyHash = _keyEquality.hash (key);
353
- var valueHash = _valueEquality.hash (value );
348
+ var valueHash = _valueEquality.hash (map[key] as V );
354
349
hash = (hash + 3 * keyHash + 7 * valueHash) & _hashMask;
355
350
}
356
351
hash = (hash + (hash << 3 )) & _hashMask;
@@ -494,8 +489,3 @@ class CaseInsensitiveEquality implements Equality<String> {
494
489
@override
495
490
bool isValidKey (Object ? object) => object is String ;
496
491
}
497
-
498
- int _addOne (int i) => i + 1 ;
499
- int _subtractOne (int i) => i - 1 ;
500
- int _one () => 1 ;
501
- int _negativeOne () => - 1 ;
0 commit comments