Существует ли какая-либо практическая разница между Set
и Collection
в Java, кроме того, что a Collection
может включать один и тот же элемент дважды? Они имеют одинаковые методы.
(Например, Set
дает мне больше возможностей для использования библиотек, которые принимают Set
, но не Collection
s?)
edit: Я могу подумать о 5 разных ситуациях, чтобы судить об этом вопросе. Может ли кто-нибудь еще придумать больше? Я хочу убедиться, что я понимаю тонкости здесь.
- создание метода, который принимает аргумент
Set
илиCollection
.Collection
является более общим и принимает больше возможностей ввода. (если я разрабатываю определенный класс или интерфейс, я буду лучше для своих потребителей и более строг на своих подклассах/исполнителях, если я используюCollection
.) - создание метода, который возвращает
Set
илиCollection
.Set
предлагает больше гарантий, чемCollection
(даже если это просто гарантия не включать один элемент дважды). (если я разрабатываю определенный класс или интерфейс, я буду лучше для своих потребителей и более строг для своих подклассов/исполнителей, если я используюSet
.) - проектирование класса, реализующего интерфейс
Set
илиCollection
. Аналогичные проблемы, как №2. Пользователи моего класса/интерфейса получают больше гарантий, более ответственны подклассы/исполнители. - проектирование интерфейса, расширяющего интерфейс
Set
илиCollection
. Очень похоже на # 3. - код, который использует
Set
илиCollection
. Здесь я мог бы использоватьSet
; единственные причины, по которым я могу использоватьCollection
, - это вернуть кодCollection
из чужого кода или мне придется обрабатывать коллекцию, содержащую дубликаты.