<!DOCTYPE html><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
Hi,<br>
<br>
It seems like a reasonable API enhancement, the implementation
already supports sub-ranges.<br>
<br>
Created <a class="issue-link" data-issue-key="JDK-8352171" href="https://bugs.openjdk.org/browse/JDK-8352171" id="key-val" rel="5153081">JDK-8352171</a> Arrays.hashCode for sub-range of
byte array API addition<br>
<br>
Regards, Roger<span role="button" tabindex="0" class="overlay-icon aui-icon aui-icon-small aui-iconfont-edit" aria-label="Arrays.hashCode for sub-range of byte array API addition: Edit Summary"></span><br>
<br>
<div class="moz-cite-prefix">On 1/31/25 6:45 AM, Matthew Swift
wrote:<br>
</div>
<blockquote type="cite" cite="mid:CANGKH60GKL43+diO4+7boqCMKs4Og_O-opzY=RiEjCnYvJJ9yg@mail.gmail.com">
<div dir="ltr">Hello experts,
<div><br>
</div>
<div>Firstly, please let me know where to post this question if
it is an inappropriate question for this mailing list.</div>
<div><br>
</div>
<div>The java.util.Arrays utility class currently exposes pairs
of methods for comparing arrays of primitives and objects, for
example:</div>
<div><br>
</div>
<div> java.util.Arrays#equals(byte[], byte[])</div>
<div> java.util.Arrays#equals(byte[], int, int, byte[], int,
int)</div>
<div><br>
</div>
<div>However, only a single method is provided for the
equivalent hashCode() methods:</div>
<div><br>
</div>
<div> java.util.Arrays#hashCode(byte[])</div>
<div><br>
</div>
<div>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.</div>
<div><br>
</div>
<div>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.</div>
<div><br>
</div>
<div>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.</div>
<div><br>
</div>
<div>Thanks in advance,</div>
<div>Matt</div>
<div><br>
</div>
</div>
</blockquote>
<br>
</body>
</html>