@Override
  public boolean equals(Object o) {
    if (o == this) {
      return true;
    }

    if (!(o instanceof Map)) {
      return false;
    }
    Map m = (Map) o;
    if (m.size() != size()) {
      return false;
    }

    try {
      for (final Entry e : (Iterable<Entry>) entrySet()) {
        Object key = e.getKey();
        Object value = e.getValue();
        if (value == null) {
          if (!(m.get(key) == null && m.containsKey(key))) {
            return false;
          }
        } else {
          if (!value.equals(m.get(key))) {
            return false;
          }
        }
      }
    } catch (ClassCastException unused) {
      return false;
    } catch (NullPointerException unused) {
      return false;
    }

    return true;
  }
equals is over-ridden to make sure it is based on the objects we expose and not the internal
CachedDeserializables.
geode-core/src/main/java/org/apache/geode/cache/operations/internal/UpdateOnlyMap.java