code: private int _hashCode(Object values) {
          int valueHash = 0;
          if (values instanceof Object[])
              valueHash = Arrays.deepHashCode((Object[]) values);
          else if (values instanceof byte[])
              valueHash = Arrays.hashCode((byte[]) values);
          else if (values instanceof short[])
              valueHash = Arrays.hashCode((short[]) values);
          else if (values instanceof int[])
              valueHash = Arrays.hashCode((int[]) values);
          else if (values instanceof long[])
              valueHash = Arrays.hashCode((long[]) values);
          else if (values instanceof char[])
              valueHash = Arrays.hashCode((char[]) values);
          else if (values instanceof float[])
              valueHash = Arrays.hashCode((float[]) values);
          else if (values instanceof double[])
              valueHash = Arrays.hashCode((double[]) values);
          else if (values instanceof boolean[])
              valueHash = Arrays.hashCode((boolean[]) values);
          else if (values != null)
              valueHash = values.hashCode();
          return valueHash;
      }
docs: copy from Array.deepHashCode0