<html><body><div style="font-family: arial, helvetica, sans-serif; font-size: 12pt; color: #000000"><div>Just a comment "en passant",</div><div>array, List or String in Java tend to use the from/to index convention instead of the offset+length convention which is the convention for system calls (read/write etc).</div><div><br data-mce-bogus="1"></div><div>regards,</div><div>RĂ©mi</div><div><br></div><hr id="zwchr" data-marker="__DIVIDER__"><div data-marker="__HEADERS__"><blockquote style="border-left:2px solid #1010FF;margin-left:5px;padding-left:5px;color:#000;font-weight:normal;font-style:normal;text-decoration:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt;"><b>From: </b>"Roger Riggs" <roger.riggs@oracle.com><br><b>To: </b>"core-libs-dev" <core-libs-dev@openjdk.org><br><b>Sent: </b>Monday, March 17, 2025 7:42:18 PM<br><b>Subject: </b>Re: Missing offset+length Arrays.hashCode() methods?<br></blockquote></div><div data-marker="__QUOTED_TEXT__"><blockquote style="border-left:2px solid #1010FF;margin-left:5px;padding-left:5px;color:#000;font-weight:normal;font-style:normal;text-decoration:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt;">Hi,<br>
<br>
It seems like a reasonable API enhancement, the implementation
already supports sub-ranges.<br>
<br>
Created <a class="issue-link" href="https://bugs.openjdk.org/browse/JDK-8352171" id="key-val" rel="5153081" target="_blank">JDK-8352171</a> Arrays.hashCode for sub-range of
byte array API addition<br>
<br>
Regards, Roger<span class="overlay-icon aui-icon aui-icon-small aui-iconfont-edit"></span><br>
<br>
<div class="moz-cite-prefix">On 1/31/25 6:45 AM, Matthew Swift
wrote:<br>
</div>
<blockquote 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><br></blockquote></div></div></body></html>