@Override public boolean retainAll(Collection<?> arg0) { boolean removed = true; List<TimeWrapped> removals = new ArrayList<TimeWrapped>(); for (TimeWrapped item : queue) { boolean toRemove = true; for (Object keeper : arg0) toRemove &= !item.equals(keeper); if (toRemove) removals.add(item); } for (TimeWrapped item : removals) removed &= remove(item); return removed; }