class CollectionUtils {

  public static boolean mapEquals(Map<?, ?> map1, Map<?, ?> map2) {
    if (map1 == null && map2 == null) {
      return true;
    }
    if (map1 == null || map2 == null) {
      return false;
    }
    if (map1.size() != map2.size()) {
      return false;
    }
    for (Map.Entry<?, ?> entry : map1.entrySet()) {
      Object key = entry.getKey();
      Object value1 = entry.getValue();
      Object value2 = map2.get(key);
      if (!objectEquals(value1, value2)) {
        return false;
      }
    }
    return true;
  }

  private  CollectionUtils();

}