RFR: 8166365: Small immutable collections should provide optimized implementations when possible

Paul Sandoz paul.sandoz at oracle.com
Tue Jan 10 16:32:25 UTC 2017


Hi,

ImmutableCollections
—

Did you forget or intentionally omit overriding the hashCode for List2 and ListN?


 481         @Override
 482         public int hashCode() {
 483             int h = 0;
 484             for (E e : elements) {
 485                 if (e != null) {
 486                     h += e.hashCode();
 487                 }
 488             }
 489             return h;
 490         }

No need for the null check of e. If you override hashCode should you override equals as well?


 617         @Override
 618         public int hashCode() {
 619             return k0.hashCode() ^ v0.hashCode();
 620         }

That does not conform to the specification of Map.hashCode:

/**
 * Returns the hash code value for this map.  The hash code of a map is
 * defined to be the sum of the hash codes of each entry in the map's
 * {@code entrySet()} view.  This ensures that {@code m1.equals(m2)}

(Your tests might be lucky with the summing of hash codes with distinct ranges of bits set?)


 669         @Override
 670         public boolean containsValue(Object o) {
 671             for (int i = 1; i < table.length; i += 2) {
 672                 Object v = table[i];
 673                 if (v != null && o.equals(v)) {
 674                     return true;
 675                 }
 676             }
 677             return false;
 678         }

No need for the null check for v, can pass table[i] directly to o.equals

Paul.

> On 10 Jan 2017, at 03:50, Claes Redestad <claes.redestad at oracle.com> wrote:
> 
> Hi,
> 
> please review this change to improve startup/warmup characteristics
> and performance of the immutable collection factories:
> 
> Bug: https://bugs.openjdk.java.net/browse/JDK-8166365
> Webrev: http://cr.openjdk.java.net/~redestad/8166365/webrev.01/
> 
> While filed as an RFE, and a more thorough examination of the hierarchy
> of the ImmutableCollection classes has been discussed[1], this more
> limited patch resolves some immediate issues related to module system
> bootstrap and is therefore motivated to push to 9.
> 
> Thanks!
> 
> /Claes
> 
> [1] we should likely not inherit Iterator classes that check for
> co-modification etc,



More information about the core-libs-dev mailing list