@Override
  public boolean containsAll(Collection<?> c) {
    List list = new ArrayList();
    for (Object o : c) {
      if (list.contains(o)) continue;
      list.add(o);
    }
    for (T t : this) {
      if (list.remove(t) && list.isEmpty()) return true;
    }
    return false;
  }