code: @SuppressWarnings("unchecked")
    public <E> boolean isEqualsCollections(Collection<E> coll1, Collection<E> coll2, boolean isOrdered,
        ISrvIsEquals<E> srvIsEquals) {
      if((coll1 == null && coll2 != null) ||
          (coll1 != null && coll2 == null)) {
        return false;
      }
      if(coll1 != null && coll2 != null) {
        if(coll1.size() != coll2.size()) {
          return false;
        }
        if(isOrdered) {
          Object[] arr1 = coll1.toArray();
          Object[] arr2 = coll2.toArray();
          for(int i=0; i < coll1.size(); i++) {
            if(!srvIsEquals.getIsEquals((E)arr1[i], (E)arr2[i])) {
              return false;
            }
          }
        }
        else {
          outer:
          for(E e1 : coll1) {
            for(E e2 : coll2) {
              if(srvIsEquals.getIsEquals(e1, e2)) {
                continue outer;
              }
            }
            return false;
          }
        }
      }
      return true;  
    }
docs: This is alternative
  to avoid problems of overriding Object.equals(Object other)
  @param coll1
  @param coll2
  @param isOrdered
  @param srvIsEquals
  @return