src/java.base/share/classes/java/util/Arrays.java
changeset 49955 ea246151be08
parent 49433 b6671a111395
child 51884 2ee7e1b7ba66
equal deleted inserted replaced
49954:deefa2120bc4 49955:ea246151be08
  4721             return 0;
  4721             return 0;
  4722 
  4722 
  4723         int result = 1;
  4723         int result = 1;
  4724 
  4724 
  4725         for (Object element : a) {
  4725         for (Object element : a) {
  4726             int elementHash = 0;
  4726             final int elementHash;
  4727             if (element instanceof Object[])
  4727             final Class<?> cl;
       
  4728             if (element == null)
       
  4729                 elementHash = 0;
       
  4730             else if ((cl = element.getClass().getComponentType()) == null)
       
  4731                 elementHash = element.hashCode();
       
  4732             else if (element instanceof Object[])
  4728                 elementHash = deepHashCode((Object[]) element);
  4733                 elementHash = deepHashCode((Object[]) element);
  4729             else if (element instanceof byte[])
  4734             else
  4730                 elementHash = hashCode((byte[]) element);
  4735                 elementHash = primitiveArrayHashCode(element, cl);
  4731             else if (element instanceof short[])
       
  4732                 elementHash = hashCode((short[]) element);
       
  4733             else if (element instanceof int[])
       
  4734                 elementHash = hashCode((int[]) element);
       
  4735             else if (element instanceof long[])
       
  4736                 elementHash = hashCode((long[]) element);
       
  4737             else if (element instanceof char[])
       
  4738                 elementHash = hashCode((char[]) element);
       
  4739             else if (element instanceof float[])
       
  4740                 elementHash = hashCode((float[]) element);
       
  4741             else if (element instanceof double[])
       
  4742                 elementHash = hashCode((double[]) element);
       
  4743             else if (element instanceof boolean[])
       
  4744                 elementHash = hashCode((boolean[]) element);
       
  4745             else if (element != null)
       
  4746                 elementHash = element.hashCode();
       
  4747 
  4736 
  4748             result = 31 * result + elementHash;
  4737             result = 31 * result + elementHash;
  4749         }
  4738         }
  4750 
  4739 
  4751         return result;
  4740         return result;
       
  4741     }
       
  4742 
       
  4743     private static int primitiveArrayHashCode(Object a, Class<?> cl) {
       
  4744         return
       
  4745             (cl == byte.class)    ? hashCode((byte[]) a)    :
       
  4746             (cl == int.class)     ? hashCode((int[]) a)     :
       
  4747             (cl == long.class)    ? hashCode((long[]) a)    :
       
  4748             (cl == char.class)    ? hashCode((char[]) a)    :
       
  4749             (cl == short.class)   ? hashCode((short[]) a)   :
       
  4750             (cl == boolean.class) ? hashCode((boolean[]) a) :
       
  4751             (cl == double.class)  ? hashCode((double[]) a)  :
       
  4752             // If new primitive types are ever added, this method must be
       
  4753             // expanded or we will fail here with ClassCastException.
       
  4754             hashCode((float[]) a);
  4752     }
  4755     }
  4753 
  4756 
  4754     /**
  4757     /**
  4755      * Returns {@code true} if the two specified arrays are <i>deeply
  4758      * Returns {@code true} if the two specified arrays are <i>deeply
  4756      * equal</i> to one another.  Unlike the {@link #equals(Object[],Object[])}
  4759      * equal</i> to one another.  Unlike the {@link #equals(Object[],Object[])}