<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>