/** * This is an extremely expensive implementation of * {@link Set#retainAll(Collection)}. It is implemented as O(n**2). */ @Override public boolean retainAll(final Collection<?> arg) { boolean changed = false; for (int i = 0; i < size; ++i) { final Object entry = entries[i]; boolean exists = false; // cannot use Collection.contains(), as we want identity for (final Object v : arg) { if (v == entry) { exists = true; break; } } if (!exists) { entries[i] = null; changed = true; } } if (changed) { clean(); } return changed; }
/** * This is an extremely expensive implementation of * {@link Set#removeAll(Collection)}. It is implemented as O(n**2). */ @Override public boolean removeAll(final Collection<?> arg) { boolean changed = false; for (final Object entry : arg) { final int i = indexOf(entry); if (i >= 0) { entries[i] = null; changed = true; } } if (changed) { clean(); } return changed; }