почему нет Map # removeAll (Collection <?>)? - PullRequest
17 голосов
/ 28 апреля 2011

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

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

Ответы [ 2 ]

17 голосов
/ 28 апреля 2011

Философия API коллекций заключается в том, чтобы быть как можно меньше и проще.Представления «Коллекция» на карте уже позволяют выполнять эту операцию, поэтому дополнительный метод не требуется.

keySet метод возвращает представление карты,Операции над набором ключей отражены на карте.

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

1 голос
/ 28 апреля 2011

Поскольку карта не является коллекцией, она не расширяет интерфейс коллекции.Карты реализуют интерфейс коллекции USE для обеспечения собственной функциональности.

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...