Хороший вопрос.Я предполагаю, что основная цель явного наличия интерфейса для концепции Set
по сравнению с концепцией Collection
состоит в том, чтобы фактически формально различать понятия.Допустим, вы пишете метод
void x(Collection<?> c);
У вас не будет того же представления о том, какие аргументы вы хотите получить, как если бы вы писали
void x(Set<?> s);
Второй методожидает Collections
, которые содержат каждый элемент не более одного раза (то есть Sets
).Это большая семантическая разница с первым методом, который не заботится о том, получает ли он Sets
, Lists
или любой другой тип Collection
Если вы внимательно посмотрите, Javadoc из Set
метод также отличается, явно показывая различные понятия, которые вступают в игру, когда речь идет о Collection
или Set