From d49ecf984b6af84eec5b35492bdbc028f477a322 Mon Sep 17 00:00:00 2001 From: He-Pin Date: Sun, 31 May 2026 21:23:50 +0800 Subject: [PATCH] perf: eliminate redundant getHash calls in HashMap/HashSet concat Motivation: In BitmapIndexedMapNode.concat and BitmapIndexedSetNode.concat, the leftNodeRightData branch calls bm.getHash(rightDataIdx) twice: once to store in rightOriginalHash, and again as the originalHash argument to updated(). The second call is redundant since the value is already available. Modification: Replace the second bm.getHash(rightDataIdx) with rightOriginalHash in both HashMap and HashSet concat implementations. Result: Eliminates one redundant array access per right-side data element during concat operations in the leftNodeRightData branch. --- library/src/scala/collection/immutable/HashMap.scala | 2 +- library/src/scala/collection/immutable/HashSet.scala | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/library/src/scala/collection/immutable/HashMap.scala b/library/src/scala/collection/immutable/HashMap.scala index 7a625e7a68bf..75fab1705637 100644 --- a/library/src/scala/collection/immutable/HashMap.scala +++ b/library/src/scala/collection/immutable/HashMap.scala @@ -1541,7 +1541,7 @@ private final class BitmapIndexedMapNode[K, +V]( getNode(leftNodeIdx).updated( key = bm.getKey(rightDataIdx), value = bm.getValue(rightDataIdx), - originalHash = bm.getHash(rightDataIdx), + originalHash = rightOriginalHash, hash = improve(rightOriginalHash), shift = nextShift, replaceValue = true diff --git a/library/src/scala/collection/immutable/HashSet.scala b/library/src/scala/collection/immutable/HashSet.scala index 1ef6257bc855..0715fd09a45d 100644 --- a/library/src/scala/collection/immutable/HashSet.scala +++ b/library/src/scala/collection/immutable/HashSet.scala @@ -1611,7 +1611,7 @@ private final class BitmapIndexedSetNode[A]( val leftNode = getNode(leftNodeIdx) val updated = leftNode.updated( element = bm.getPayload(rightDataIdx), - originalHash = bm.getHash(rightDataIdx), + originalHash = rightOriginalHash, hash = improve(rightOriginalHash), shift = nextShift )