From bb2b3f9ee4cd737ca9b6781948518dd1871f177c Mon Sep 17 00:00:00 2001 From: David Mollitor Date: Fri, 11 Sep 2026 12:26:41 +0000 Subject: [PATCH] [MINOR][CORE] Simplify the next-page index computation in BytesToBytesMap.MapIterator `MapIterator.advanceToNextPage()` computed the next page index as `int nextIdx = dataPages.indexOf(currentPage) + 1;` and then decremented it inside a conditional (`nextIdx--`). Reuse the `indexOf` result and set `nextIdx` once in an `if`/`else` so it can be `final`: final int idx = dataPages.indexOf(currentPage); final int nextIdx; if (destructive && idx >= 0) { dataPages.remove(idx); pageToFree = currentPage; nextIdx = idx; } else { nextIdx = idx + 1; } `idx >= 0` is equivalent to the previous `currentPage != null` guard (whenever `currentPage` is non-null it is an element of `dataPages`, and `indexOf(null)` is `-1`), and reusing `idx` for `remove(idx)` avoids the redundant second linear scan that `remove(Object)` performs. Behavior is unchanged. No lock or I/O behavior is changed. Generated-by: Claude Opus 4.8 Co-authored-by: Isaac --- .../org/apache/spark/unsafe/map/BytesToBytesMap.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/org/apache/spark/unsafe/map/BytesToBytesMap.java b/core/src/main/java/org/apache/spark/unsafe/map/BytesToBytesMap.java index 8c86389b4c334..0d4959168c138 100644 --- a/core/src/main/java/org/apache/spark/unsafe/map/BytesToBytesMap.java +++ b/core/src/main/java/org/apache/spark/unsafe/map/BytesToBytesMap.java @@ -323,11 +323,14 @@ private void advanceToNextPage() { try { synchronized (this) { - int nextIdx = dataPages.indexOf(currentPage) + 1; - if (destructive && currentPage != null) { - dataPages.remove(currentPage); + final int idx = dataPages.indexOf(currentPage); + final int nextIdx; + if (destructive && idx >= 0) { + dataPages.remove(idx); pageToFree = currentPage; - nextIdx--; + nextIdx = idx; + } else { + nextIdx = idx + 1; } if (dataPages.size() > nextIdx) { currentPage = dataPages.get(nextIdx);