code: protected boolean valuesEqual(@NotNull Object queriedValue, @Nullable V valueInMap) {
          return queriedValue.equals(valueInMap);
      }
docs: Returns {@code true} if the two given value objects should be considered equal for this map.
  This equivalence is used in the implementations of {@link #containsValue(Object)}, {@link
  #containsEntry(Object, Object)}, {@link #remove(Object, Object)}, {@link #replace(Object,
  Object, Object)} methods, and the methods of the {@linkplain #values() values} collection.
  
  <p>This method should obey general equivalence relation rules (see {@link
  Object#equals(Object)} documentation for details).
  
  <p>It is guaranteed that the first specified value is non-null and the arguments are not
  identical (!=).
  
  <p>This method accepts raw {@code Object} argument, because {@link Map} interface allows
  to check presence of raw value, e. g. {@link #containsValue(Object)} without {@link
  ClassCastException}. If you want to subclass parameterized {@code SmoothieMap}, you should
  cast the arguments to the value parameter class yourself, e. g.: <pre><code>
  class IpToDomainMap extends SmoothieMap&lt;Integer, String&gt; {
  
  &#064;Override
  protected boolean valuesEqual(&#064;NotNull Object d1, &#064;Nullable String d2) {
  return ((String) d1).equalsIgnoreCase(d2);
  }
  }</code></pre>
  
  <p>Default implementation is {@code queriedValue.equals(valueInMap)}.
  
  @param queriedValue the first value to compare, that is passed to queries like {@link
  #containsValue(Object)}
  @param valueInMap the second value to compare, this value is already stored in the map
  @return {@code true} if the given values should be considered equal for this map