code: static <K, V> int calculateHashCodeForMap(Map<K, V> a) {
          int result = 0;
          for (Map.Entry<K, V> entry : a.entrySet()) {
              result += calculateHashCodeForObject(entry.getKey()) ^ calculateHashCodeForObject(entry.getValue());
          }
          return result;
      }
docs: Calculates the hash code for a {@link Map}. We don't use the default hash code method of {@link Map} because for
  byte arrays and protobuf enums it use {@link Object#hashCode()}.
  
  @param <K> the key type
  @param <V> the value type
  @param a the a
  @return the int