Существует ли какая-либо практическая разница между 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из чужого кода или мне придется обрабатывать коллекцию, содержащую дубликаты.