No creo que esto va a suceder sólo una vez en la vida de su aplicación.
Entonces, lo que yo haría, es delegar a otro objeto la responsabilidad de mantener una referencia a los objetos agregados a ese mapa.
Así que la próxima vez que necesite para eliminarlo, se utiliza ese "mapa inversa" ...
class MapHolder {
private Map<String, DomainObj> originalMap;
private Map<DomainObj,String> reverseMap;
public void remove(DomainObj value) {
if (reverseMap.contains(value)) {
originalMap.remove(reverseMap.get(value));
reverseMap.remove(value);
}
}
}
Esto es mucho más rápido que la iteración.
Obviamente, necesita mantenerlos sincronizados. Pero no debería ser tan difícil si refectorio de su código para tener un objeto que sea responsable del estado del mapa.
Recuerda que en OOP tenemos objetos que tienen un estado y comportamiento.Si sus datos están pasando variables por todos lados, está creando dependencias innecesarias entre los objetos
Sí, le tomará un tiempo corregir el código, pero el tiempo dedicado a corregirlo le ahorrará muchos dolores de cabeza en el futuro. Piénsalo.
estoy usando HashMap de Java – Supertux