On Thu, 13 Jul 2023 14:50:55 GMT, Roger Riggs <rri...@openjdk.org> wrote:

>> Please review this PR to use modern APIs and language features to simplify 
>> equals for BitSet. 
>> 
>> I couldn't see how to refactor hashCode using Arrays utility methods in a 
>> way that preserves its specification. So, aside from refactoring its doc 
>> comment and annotating it with `@Overrides`, I left it intact.
>
> LGTM

@RogerRiggs, @Martin-Buchholz, are you okay with a few redundant range checks?

`Arrays.equals(a, aFromIndex, aToIndex, b, bFromIndex, bToIndex)` performs two 
range checks, which aren't needed here. However, `Arrays.equals` is readable; a 
less readable but leaner alternative would be `ArraysSupport.mismatch(a, 
aFromIndex, b, bFromIndex, length)`. Here's a diff from this PR's version, to 
consider:


diff --git a/src/java.base/share/classes/java/util/BitSet.java 
b/src/java.base/share/classes/java/util/BitSet.java
index 7189dc49228..fea9693d7ed 100644
--- a/src/java.base/share/classes/java/util/BitSet.java
+++ b/src/java.base/share/classes/java/util/BitSet.java
@@ -33,6 +33,8 @@ import java.util.function.IntConsumer;
 import java.util.stream.IntStream;
 import java.util.stream.StreamSupport;
 
+import jdk.internal.util.ArraysSupport;
+
 /**
  * This class implements a vector of bits that grows as needed. Each
  * component of the bit set has a {@code boolean} value. The
@@ -1076,8 +1078,11 @@ public class BitSet implements Cloneable, 
java.io.Serializable {
         checkInvariants();
         set.checkInvariants();
 
+        if (wordsInUse != set.wordsInUse)
+            return false;
+
         // Check words in use by both BitSets
-        return Arrays.equals(words, 0, wordsInUse, set.words, 0, 
set.wordsInUse);
+        return ArraysSupport.mismatch(words, 0, set.words, 0, wordsInUse) == 
-1;
     }
 
     /**

-------------

PR Comment: https://git.openjdk.org/jdk/pull/14868#issuecomment-1642734404

Reply via email to