Предполагая, что я вас правильно понимаю, и вы хотите удалить с карты все, начиная с 'x-' и 'x1-' (но не с 'x1111-', даже если 'x1' является префиксом 'x1111')и эффективность важна, вы можете захотеть взглянуть на одну из реализаций NavigableMap
, такую как (например) TreeMap
.
NavigableMaps
хранят свои записи в порядке (по порядку естественного ключа, по умолчанию) и могут быть перебраны и найдены очень эффективно.
Они также предоставляют методы, подобные subMap
, которые могут создавать другую карту, которая содержит эти ключи в указанном диапазоне.Важно отметить, что эта возвращенная Карта является интерактивным , что означает, что операции на этой карте также влияют на исходную карту.
Итак:
NavigableMap<String,String> map = new TreeMap<String,String>();
// populate data
for (String prefixToDelete : rem) {
// e.g. prefixToDelete = "x"
String startOfRange = prefixToDelete + "-"; // e.g. x-
String endOfRange = prefixToDelete + "`"; // e.g. x`; ` comes after - in sort order
map.subMap(startOfRange, endOfRange).clear(); // MAGIC!
}
Предполагается, что ваша карта велика, .subMap()
должно быть намного быстрее, чем итерация по каждой записи карты (поскольку TreeMap использует красно-черное дерево для быстрого поиска).