[ https://issues.apache.org/jira/browse/HADOOP-11221?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14182327#comment-14182327 ]
Tsz Wo Nicholas Sze commented on HADOOP-11221: ---------------------------------------------- The capacity of an IdentityHashStore and buffer.length (=4*capacity) are powers of 2. Therefore, we may use & to calculate positive mod, i.e. {code} final int hash = System.identityHashCode(k); final int numEntries = buffer.length >> 1; final int index = hash & (numEntries - 1); {code} > JAVA specification for hashcode does not enforce it to be non-negative, but > IdentityHashStore assumes System.identityHashCode() is non-negative > ----------------------------------------------------------------------------------------------------------------------------------------------- > > Key: HADOOP-11221 > URL: https://issues.apache.org/jira/browse/HADOOP-11221 > Project: Hadoop Common > Issue Type: Bug > Components: util > Affects Versions: 2.4.1 > Reporter: Jinghui Wang > Assignee: Jinghui Wang > Attachments: HADOOP-11221.patch, HADOOP-11221.v1.patch > > > The following code snippet shows that IdentityHashStore assumes the hashCode > is always non-negative. > {code:borderStyle=solid} > private void putInternal(Object k, Object v) { > int hash = System.identityHashCode(k); > final int numEntries = buffer.length / 2; > int index = hash % numEntries; > ... > } > > private int getElementIndex(K k) { > ... > final int numEntries = buffer.length / 2; > int hash = System.identityHashCode(k); > int index = hash % numEntries; > int firstIndex = index; > ... > } > {code} -- This message was sent by Atlassian JIRA (v6.3.4#6332)