From d85243f02b34d03bd7af63a5bcbc73f500f720df Mon Sep 17 00:00:00 2001 From: Claes Redestad Date: Thu, 19 Jan 2023 16:50:07 +0000 Subject: [PATCH] 8300647: Miscellaneous hashCode improvements in java.base Reviewed-by: stsypanov, rriggs --- .../classes/sun/security/util/DerValue.java | 7 ++-- .../classes/java/lang/ProcessEnvironment.java | 35 +++---------------- 2 files changed, 6 insertions(+), 36 deletions(-) diff --git a/src/java.base/share/classes/sun/security/util/DerValue.java b/src/java.base/share/classes/sun/security/util/DerValue.java index 90c73d12b27..f960326eb57 100644 --- a/src/java.base/share/classes/sun/security/util/DerValue.java +++ b/src/java.base/share/classes/sun/security/util/DerValue.java @@ -25,6 +25,7 @@ package sun.security.util; +import jdk.internal.util.ArraysSupport; import sun.nio.cs.UTF_32BE; import sun.util.calendar.CalendarDate; import sun.util.calendar.CalendarSystem; @@ -1257,11 +1258,7 @@ public class DerValue { */ @Override public int hashCode() { - int result = tag; - for (int i = start; i < end; i++) { - result = 31 * result + buffer[i]; - } - return result; + return ArraysSupport.vectorizedHashCode(buffer, start, end - start, tag, ArraysSupport.T_BYTE); } /** diff --git a/src/java.base/unix/classes/java/lang/ProcessEnvironment.java b/src/java.base/unix/classes/java/lang/ProcessEnvironment.java index 703260cce2c..802e5b6a6f0 100644 --- a/src/java.base/unix/classes/java/lang/ProcessEnvironment.java +++ b/src/java.base/unix/classes/java/lang/ProcessEnvironment.java @@ -145,11 +145,11 @@ final class ProcessEnvironment public boolean equals(Object o) { return o instanceof ExternalData - && arrayEquals(getBytes(), ((ExternalData) o).getBytes()); + && Arrays.equals(getBytes(), ((ExternalData) o).getBytes()); } public int hashCode() { - return arrayHash(getBytes()); + return Arrays.hashCode(getBytes()); } } @@ -178,7 +178,7 @@ final class ProcessEnvironment } public int compareTo(Variable variable) { - return arrayCompare(getBytes(), variable.getBytes()); + return Arrays.compare(getBytes(), variable.getBytes()); } public boolean equals(Object o) { @@ -211,7 +211,7 @@ final class ProcessEnvironment } public int compareTo(Value value) { - return arrayCompare(getBytes(), value.getBytes()); + return Arrays.compare(getBytes(), value.getBytes()); } public boolean equals(Object o) { @@ -412,31 +412,4 @@ final class ProcessEnvironment } } - // Replace with general purpose method someday - private static int arrayCompare(byte[]x, byte[] y) { - int min = x.length < y.length ? x.length : y.length; - for (int i = 0; i < min; i++) - if (x[i] != y[i]) - return x[i] - y[i]; - return x.length - y.length; - } - - // Replace with general purpose method someday - private static boolean arrayEquals(byte[] x, byte[] y) { - if (x.length != y.length) - return false; - for (int i = 0; i < x.length; i++) - if (x[i] != y[i]) - return false; - return true; - } - - // Replace with general purpose method someday - private static int arrayHash(byte[] x) { - int hash = 0; - for (int i = 0; i < x.length; i++) - hash = 31 * hash + x[i]; - return hash; - } - }