Skip to content

Commit 1dbcbf0

Browse files
committed
Add another fast path to i.Hash{Map,Set}.equals
We added the size field to the nodes recently. This can be used to short circuit equals without descending into the trie.
1 parent 42d69ab commit 1dbcbf0

File tree

2 files changed

+6
-4
lines changed

2 files changed

+6
-4
lines changed

src/library/scala/collection/immutable/ChampHashMap.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1008,8 +1008,9 @@ private final class BitmapIndexedMapNode[K, +V](
10081008
(this eq node) ||
10091009
(this.nodeMap == node.nodeMap) &&
10101010
(this.dataMap == node.dataMap) &&
1011-
java.util.Arrays.equals(this.originalHashes, node.originalHashes) &&
1012-
deepContentEquality(this.content, node.content, content.length)
1011+
(this.size == node.size) &&
1012+
java.util.Arrays.equals(this.originalHashes, node.originalHashes) &&
1013+
deepContentEquality(this.content, node.content, content.length)
10131014
case _ => false
10141015
}
10151016

src/library/scala/collection/immutable/ChampHashSet.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -581,8 +581,9 @@ private final class BitmapIndexedSetNode[A](
581581
(this eq node) ||
582582
(this.nodeMap == node.nodeMap) &&
583583
(this.dataMap == node.dataMap) &&
584-
java.util.Arrays.equals(this.originalHashes, node.originalHashes) &&
585-
deepContentEquality(this.content, node.content, content.length)
584+
(this.size == node.size) &&
585+
java.util.Arrays.equals(this.originalHashes, node.originalHashes) &&
586+
deepContentEquality(this.content, node.content, content.length)
586587
case _ => false
587588
}
588589

0 commit comments

Comments
 (0)