Удалить несколько ключей из карты эффективным способом?

У меня есть Map<String,String> с большим количеством пар значений ключа. Теперь я хочу удалить выбранные ключи из этого Map. Следующий код показывает, что я сделал для этого.

Set keySet = new HashSet(); //I added keys to keySet which I want to remove. 

Тогда:

Iterator entriesIterator = keySet.iterator();
while (entriesIterator.hasNext()) {
   map.remove( entriesIterator.next().toString());
} 

Это работает. Я просто хочу знать, что может быть лучше для достижения моего требования?

94 голоса | спросил Ruchira Gayan Ranaweera 16 J000000Tuesday13 2013, 15:51:23

2 ответа


0

Если ваш набор содержит строки, которые вы хотите удалить, вы можете использовать метод keySet и map.keySet().removeAll(keySet);

  

keySet возвращает представление Set ключей, содержащихся в этой карте. Набор опирается на карту, поэтому изменения в карте отражаются в наборе, и наоборот.

Придуманный пример:

Map<String, String> map = new HashMap<>();
map.put("a", "");
map.put("b", "");
map.put("c", "");

Set<String> set = new HashSet<> ();
set.add("a");
set.add("b");

map.keySet().removeAll(set);

System.out.println(map); //only contains "c"
ответил assylias 16 J000000Tuesday13 2013, 15:55:38
0

Просто ради полноты:

Как и предполагалось, java.util.AbstractSet#removeAll действительно итерирует по всем записям, но с одним маленьким фокусом: он использует итератор меньшей коллекции:

 if (size() <= collection.size()) {
    Iterator<?> it = iterator();
    while (it.hasNext()) {
        if (collection.contains(it.next())) {
            it.remove();
        }
    }
} else {
    Iterator<?> it = collection.iterator();
    while (it.hasNext()) {
        remove(it.next());
    }
}
ответил Sebastian 14 FebruaryEurope/MoscowbTue, 14 Feb 2017 22:35:11 +0300000000pmTue, 14 Feb 2017 22:35:11 +030017 2017, 22:35:11

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132