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

    if (o instanceof SmartList) {
      return equalsWithSmartList((SmartList<?>)o);
    }
    if (o instanceof ArrayList) {
      return equalsWithArrayList((ArrayList<?>)o);
    }
    return super.equals(o);
  }
@Override
  public boolean equals(Object o)