Подтвердить что ты не робот

Почему не Map # removeAll (Collection <?>)?

Почему интерфейс Map в Java не имеет метода removeAll(Collection<?> c) для удаления ключей, например, он имеет map.remove(Object)?

Я знаю, что всегда могу сделать map.keySet().removeAll(..).. но это причина, по которой Map не имеет removeAll() и призывает нас пойти с map.keySet().removeAll(..)?

4b9b3361

Ответ 1

Философия API-интерфейсов коллекций должна быть как можно более малой и простой. Представления коллекции на карте позволяют выполнить эту операцию уже, поэтому нет необходимости в дополнительном методе.

Метод keySet возвращает представление карты. Операции над набором клавиш отражены на карте.

Более общий вопрос о дизайне интерфейса: почему интерфейс X не имеет удобного метода Y? более подробно рассматривается Мартином Фаулером в обсуждении MinimalInterface vs HumaneInterface.

Ответ 2

Поскольку Map is not Collection не расширяет интерфейс Collection. Реализации карт Интерфейс сбора USE, чтобы обеспечить им собственную функциональность.

Подумайте о такой ситуации:

  • У вас есть карта с методом removeAll (..).
  • Вы вызываете этот метод и удаляете карту...
  • и что они должны удалить? Ключи, значения или пары - записи - ключ: значение?

Карта может предоставлять методы:

  • removeAllKeys() - параметр - это набор ключей
  • removeAllValues ​​() - параметр представляет собой набор значений
  • removeAllEntries() - параметр представляет собой коллекцию пары и удаляет запись, если только значение отображается по ключу. Если на карте существует значение с ключом diffrend или наоборот, то эта запись не удаляется.

но в этом случае у вас есть три метода, а не один.

Таким образом, метод removeAll для интерфейса Map не ясен, чтобы понять, какие типы объектов должны быть проверены и удалены - ключи, значение, обе или пары.