Missing offset+length Arrays.hashCode() methods?

Roger Riggs roger.riggs at oracle.com
Mon Mar 17 18:42:18 UTC 2025


Hi,

It seems like a reasonable API enhancement, the implementation already 
supports sub-ranges.

Created JDK-8352171 <https://bugs.openjdk.org/browse/JDK-8352171> 
Arrays.hashCode for sub-range of byte array API addition

Regards, Roger

On 1/31/25 6:45 AM, Matthew Swift wrote:
> Hello experts,
>
> Firstly, please let me know where to post this question if it is an 
> inappropriate question for this mailing list.
>
> The java.util.Arrays utility class currently exposes pairs of methods 
> for comparing arrays of primitives and objects, for example:
>
>     java.util.Arrays#equals(byte[], byte[])
>     java.util.Arrays#equals(byte[], int, int, byte[], int, int)
>
> However, only a single method is provided for the equivalent 
> hashCode() methods:
>
>     java.util.Arrays#hashCode(byte[])
>
> Specifically, the offset+length versions are not present, despite 
> there being support in jdk.internal.util.ArraysSupport. Given the 
> ubiquity of equals + hashCode, I would expect there to be symmetry 
> between the equals and hashCode APIs in Arrays. The lack of support 
> means that applications cannot take advantage of intrinsics.
>
> The use-case we have is parsing byte[] network protocol packets into 
> their components, which are represented using objects containing 
> offset+length pointers into the original packet. These components are 
> frequently stored in hash sets and maps. More precisely, we are 
> parsing ASN.1 BER packets, so our use-case is remarkably similar to 
> JDK's sun.security.util.DerValue#hashCode, but could be applied 
> equally to other network protocols.
>
> I know that the String class stopped using the offset+length 
> low-allocation design some time ago, so perhaps the design I'm 
> describing above is no longer best-practice thanks to JVM 
> advancements, and hence there should be no need for offset+length 
> Arrays#hashCode - but that doesn't explain the asymmetry with 
> Arrays#equals.
>
> Thanks in advance,
> Matt
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/core-libs-dev/attachments/20250317/2e1b5edb/attachment-0001.htm>


More information about the core-libs-dev mailing list