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