/** * Retains only those entries in the map for which the procedure returns a true value. * * @param procedure determines which entries to keep * @return true if the map was modified. */ public boolean retainEntries(TObjectIntProcedure<K> procedure) { boolean modified = false; K[] keys = (K[]) _set; int[] values = _values; // Temporarily disable compaction. This is a fix for bug #1738760 tempDisableAutoCompaction(); try { for (int i = keys.length; i-- > 0; ) { if (keys[i] != FREE && keys[i] != REMOVED && !procedure.execute(keys[i], values[i])) { removeAt(i); modified = true; } } } finally { reenableAutoCompaction(true); } return modified; }